在 Java 子類別中必須明確地呼叫超類別建構子嗎?
定義子類別時,常見的做法是看到明確呼叫超類別建構子使用 super() 的超類別建構子。然而,有人可能會問這是否有必要。
super()是編譯器自動加入的嗎?
是的,如果子類別建構子省略了對超類別的呼叫建構函式時,編譯器會自動呼叫超類別中可存取的無參建構子(no-args constructor)。此預設行為稱為 建構子連結。
建構子型別
何時需要 super() ?
使用僅當滿足以下條件時才明確需要 super():
範例1:
public class Base {}
public class Derived extends Base {}
不需要明確呼叫 super(),因為 Base 有一個預設建構子。
範例 2:
public class Base {
public Base(int i) {}
}
public class Derived extends Base {
public Derived(int i) {
super(i); // Explicitly call the Base(int) constructor
}
}
在這種情況下,需要 super(i),因為超類別沒有無參數建構函數,而子類別建構子需要為其 i 參數提供初始值。
透過理解這些概念,您可以避免不必要的 super() 呼叫並確保子類別中正確的建構函數連結。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3