首頁  >  文章  >  Java  >  你應該總是在建構函式中使用“super()”嗎?

你應該總是在建構函式中使用“super()”嗎?

Barbara Streisand
Barbara Streisand原創
2024-11-02 12:30:30590瀏覽

Should You Always Use `super()` in Constructors?

建構子中 super() 的存在是可選的嗎?

在物件導向程式設計中,在衍生類別中使用建構函式是常見的做法在其超類別中呼叫建構子。然而,一些開發人員質疑在建構函數中明確指定 super() 的必要性。

編譯器自動呼叫super()

Java 編譯器自動插入對super() 的呼叫如果子類別建構子未指定超類別建構函數,則可存取超類別的無參數建構函數。這意味著在大多數情況下,省略 super() 不會影響程式的行為。

規則的例外

但是,也有一些情況需要明確調用super() 的情況:

  • 如果超類別沒有可可可訪問的無參數建構函數。
  • 如果子類別建構子有參數且超類別有一個接受參數的建構子。
  • 如果子類別建構子需要呼叫超類別中除預設無參數建構子之外的特定建構子。

存在時的建構子用法參數

當子類別建構子有參數時,子類別建構子有責任將適當的參數傳遞給超類別構造函數。除非明確指定,否則編譯器不會自動呼叫帶有參數的超類別建構函式。

範例

考慮以下程式碼:

<code class="java">public class Base {
    private Base() {}
}

public class Derived extends Base {
    public Derived(int i) {
        super(); // Call the default no-args constructor of Base
    }
}</code>

中在此範例中,派生建構函式中的super() 呼叫至關重要,因為Base 有一個私有的無參數建構子。

以上是你應該總是在建構函式中使用“super()”嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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