java中建立子類物件時總是會先建立其父類物件
阿新 • • 發佈:2019-01-04
今天跟小夥伴討論到:建立物件時,該物件的父類物件會不會建立,我的觀點是always
以下結合程式碼來證明(沒有經虛擬機器驗證)
public class Sub extends Sup{ Sub(){ System.out.println(this.o == super.o); } public static void main(String[] args) { Sub sub = new Sub(); System.out.println(Sup.i); Sub sub1 = new Sub(); System.out.println(Sup.i); System.out.println(sub.obj == sub1.obj); System.out.println(Sub.obj == Sup.obj); System.out.println(sub.o == sub1.o); } } class Sup { static int i; static Object obj = new Object(); Object o = new Object(); Sup(){ i++; } }
輸出:
1、第一行和第三行說明如果子類中沒有宣告和父類同樣的屬性,那麼直接繼承父類的屬性。
這裡的繼承不是在子類中新建一個和父類一樣的屬性,而是直接用的父類的屬性。
就好比小明繼承了他爸爸的遺產,這份遺產並不是小明一份,他爸爸一份,而是隻有一份。
2、第二行和第四行說明構造子類的時候,其父類的構造器也會被呼叫。
3、第七行說明不同子類物件呼叫的不是同一個父類物件。
這點要結合第一點來看,類似於:
因為a == b , c == d, 但是a != c ,所以 b != d
第五行和第六行幹嘛用的忘記了,囧