父類參考存放的是子類的地址,不應該調取子類的變數和方法嗎?為啥調取的是父類的所有變數和方法(或子類重寫父類的方法)
uj5u.com熱心網友回復:
父類A,屬性a1,方法a2,這個是在A.java中定義的。子類B繼承A,屬性b1,方法b2,從A繼承得到a1,a2
然后你用A a = new B();
這行代碼可以分為兩步
1、A a; 定義了一個參考a,是類A的參考,所以a所擁有的只有a1和a2,這個時候還沒有指向記憶體中的某個物件
2、a = new B();將類B的一個物件new B()指向參考a,這個時候有一個默認的向上轉型,但是由于b1和b2是定義在B.java里的,與a無關,屬于B自己擁有的,只有B的參考才可以使用,A的參考無權使用。
這個是在代碼編譯期就已經確定的,所以編譯無法通過。
uj5u.com熱心網友回復:
謝謝,明白咯,就因為有個默認的向上轉型;才導致最后調取的是父類A里面的屬性和方法(子類重寫的方法)

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/284017.html
標籤:Java相關
