/*多態的注意事項
(1)如果子類重寫了父類方法, 意味着子類里定義的方法徹底覆蓋了父類里同名的方法, 系統將不可能把父類里的方法轉移到子類中
補充對(1)的個人理解: 當s向上轉型傳給了b, b即使想調用自有的方法, 調用的依然是被重寫的子類的方法。編譯看左邊, 運行看右邊。
(2)對於實例變量(即屬性), 即使子類里定義了與父類完全相同的示例變量, 這個實例變量依然不可能覆蓋父類中定義的示例變量, 編譯運行均看左邊
*/
public class JavaTest {
public static void main(String [] args){
Sub s = new Sub();
System.out.println(s.count); //展示的是Sub類自己的count
s.display(); //display被Sub類重寫了, 所以展示的也是自己的count
Base b = s; //多態性
System.out.println(s == b); //傳遞的是引用, 因此s 和 b 是相等。結果返回true
System.out.println(b.count); //展示的是b自己的count
b.display(); //考察的是虛擬方法的調用, 多態方法的調用: 編譯看左邊 運行看右邊
}
}
//編寫一個父類, 僅僅包含一個count屬性 和 display函數
class Base{
int count = 10;
public void display(){
System.out.println(this.count);
}
}
//編寫一個子類, 也是僅僅包含一個count屬性 和 display函數。
class Sub extends Base{
int count = 20;
public void display() {
System.out.println(this.count);
}
}