Java-向上轉型后調用方法和屬性的注意事項


/*多態的注意事項
(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);
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM