1. 程式人生 > >java中建立子類物件時總是會先建立其父類物件

java中建立子類物件時總是會先建立其父類物件

今天跟小夥伴討論到:建立物件時,該物件的父類物件會不會建立,我的觀點是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

第五行和第六行幹嘛用的忘記了,囧