/*
樣例1:class Parent{int num = 3;}class Child extends Parent{int num = 4;}
*//*
樣例2:
class Parent{}class Child extends Parent{int num = 4;
}
*//*
樣例3:
class Parent{void show(){System.out.println("Parent Show!");}}class Child extends Parent{void show(){System.out.println("Child Show!");}}
*//*
樣例4:
class Parent{}class Child extends Parent{void show(){System.out.println("Child Show!");}}
*/class Parent{static void show(){System.out.println("Parent Show!");}}class Child extends Parent{static void show(){System.out.println("Child Show!");}}public class PC{public static void main(String[] args){Parent p = new Child();//樣例1://System.out.println(p.num);// 3, 輸出的是父類的num;//樣例2://System.out.println(p.num);// 錯誤: 找不到符號 num//樣例3://p.show();//Child Show! 輸出的是子類的方法!//樣例4://p.show();// 錯誤: 找不到符號 p.show();//樣例5:p.show();// Parent Show! 運行父類的靜態方法。}
}/*
總結:
對象多態時:
1.成員變量:(不涉及覆蓋)
編譯時: 參考引用變量所屬的類中是否有調用的成員變量, 有, 編譯通過,沒有,編譯失敗。
運行時: 參考引用變量所屬的類中是否有調用的成員變量, 并運行該類所屬中的成員變量。
簡單的說:編譯和運行都參考等號的左邊。
2.成員函數(非靜態):
編譯時:參考引用變量所屬的類中是否有調用的成員變量, 有, 編譯通過, 沒有,編譯失敗:
運行時:參考的是對象所屬的類中是否有調用的函數。
簡單的說:編譯看左邊, 運行看右邊。
3.靜態函數, 變量:編譯和運行都是參考左邊參數類型!其實靜態方法不存在多態, 靜態方法是屬于類的,我們說的是對象的多態!靜態方法直接用類名調用就好了,沒必要創建對象! 靜態的方法只能被靜態的方法所覆蓋!*/