首頁  >  文章  >  Java  >  Java子類別總是需要明確地呼叫超類別建構子嗎?

Java子類別總是需要明確地呼叫超類別建構子嗎?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-31 02:50:02875瀏覽

Do Java Subclasses Always Need to Explicitly Call the Superclass Constructor?

必須在 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn