存在了繼承關系之后,對象創建過程如下:
1.分配空間。要注意的是,分配空間不光是分配子類的空間,子類對象中包含的父類對象所需要的空間,一樣在這一步統一分配。在分配的空間的時候,會把所有的屬性設置為默認值。
2.遞歸的構造父類對象。
3.初始化本類屬性。
4.調用本類的構造方法。
舉例介紹對象創建的過程。
假設如下代碼:
class A{
int valueA = 100;
public A(){ valueA = 150; }
}
class B extends A {
int valueB = 200;
public B(){ valueB= 250; }
}
public calss TestInherit{
public static void main(Stirng []){
B b = new B();
}
}
我們在main方法中創建了一個b對象,創建的過程如下:
1.分配空間。在分配空間時,會把B、A這兩個對象的空間一次性都分配完畢,然后將這兩個對象的屬性都設置為默認值,這樣,valueA、valueB這兩個屬性都被設置為0。
2.遞歸構造B對象的父類對象。這里,要構造的就是A類對象。
3.初始化B的屬性。即把valueB賦值為200。
4.調用B的構造方法。
其中第2步,創建A類對象,不需要再重新分配空間,需要一下幾步:
2.1 遞歸的構造A類對象的父類對象。創建的步驟與創建A類對象同理。此例中以為A沒有任何的父類,沒有任何的輸出。
2.2 初始化A類屬性。把valueA 賦值為100.
2.3 調用A類的構造方法。
總結一下,創建B類對象的步驟一共有5步
1.分配空間
2.初始化A類屬性。
3.調用A類的構造方法.
4.初始化B的屬性。
5.調用B的構造方法。