類的構建過程是由內向外擴散的:子類初始化前,父類必須先完成初始化。
class Art {
Art() { System.out.println("Art"); }
}
class Drawing extends Art {
Drawing() { System.out.println("Drawing"); }
}
public class Cartoon extends Drawing {
Cartoon() { System.out.println("Cartoon"); }
public static void main(String[] args) {
Art cartoon = new Cartoon(); // 多態引用
}
}
Art
Drawing
Cartoon
new Cartoon() 調用 Cartoon 構造器。Cartoon 構造器隱式調用 super()(即 Drawing())。Drawing 構造器隱式調用 super()(即 Art())。Art 構造器執行,輸出 "Art"。Drawing 構造器繼續執行,輸出 "Drawing"。Cartoon 構造器繼續執行,輸出 "Cartoon"。Art 類型變量 cartoon。this() 或 super(...),編譯器自動插入無參 super()。super() 調用後、構造器體前執行,同樣遵循父類優先。new Cartoon() 必須調用 Cartoon 構造器,但構造器鏈確保父類邏輯先執行。super(...)。