必須在 Java 子類別中明確呼叫超類別建構子嗎?
定義子類別時,常見的做法是看到明確呼叫超類別建構子使用 super() 的超類別建構子。然而,有人可能會問這是否有必要。
super() 是編譯器自動加入的嗎?
是的,如果子類別建構子省略了對超類別的呼叫建構函式時,編譯器會自動呼叫超類別中可存取的無參建構子(no-args constructor)。此預設行為稱為建構子連結。
建構子的型別
何時是 super( ) 必需嗎?
只有在下列情況下才需要明確使用 super():
範例 1:
<code class="java">public class Base {} public class Derived extends Base {}</code>
否需要明確呼叫 super(),因為 Base 有一個預設建構子。
範例2:
<code class="java">public class Base { public Base(int i) {} } public class Derived extends Base { public Derived(int i) { super(i); // Explicitly call the Base(int) constructor } }</code>
在這種情況下,需要super(i),因為超類別沒有無參建構函數,子類別建構函數需要為其i 參數提供初始值。
透過理解這些概念,您可以避免不必要的 super() 呼叫並確保正確的建構子類別連結在您的子類別中。
以上是Java子類別總是需要明確地呼叫超類別建構子嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!