代碼:Java:子類構造函數的super()如何參與實例流?
Parent Class:
public class Parent {
int i = 10;
{
System.out.println(i);
}
public Parent(){
System.out.println("Parent");
}
}
Child Class:
public class Child extends Parent {
int j = 20;
{
System.out.println(j);
}
public Child() {
super();
}
}
Test Class:
public class ConstructorTest {
public static void main(String... args){
Child c = new Child();
}
}
執行流(我知道的):
- 實例的鑑定委員由上到下的
Parent
類。 - 實例成員在
Child
類中自上而下的標識。 - 在
Parent
類中從上到下執行實例變量賦值和實例塊。 - 執行
Parent
構造函數。 - 在
Child
類中從上到下執行實例變量賦值和實例塊。 - 執行
Child
構造函數。
輸出:
10
Parent
20
我的問題是:在步驟6-在Child
構造函數的執行,何必再使用兒童的super()
的父類的構造不叫?
爲什麼輸出不是:
10
Parent
20
Parent
'Parent'的構造函數被稱爲** once **,因爲您實例化了**一個**對象。沒有理由會被調用兩次。 – Spotted
Utsav as @Spotted說父構造函數是作爲子對象構造的一部分被調用的。不需要被調用兩次 – alainlompo
從您的步驟中,您已經提供了第6個點,這是代碼中發生的第一個調用。 1.主叫 2.有一個新的子對象創建和子構造函數調用因此super()被調用。 3.超級會調用父類,實例對象因此打印「10」。 4。父類構造函數被調用,因此「父」被打印。 5.然後打印子類實例對象「20」。 6.主呼叫結束。 希望這會澄清你的困惑。 –