建構子中 super() 的存在是可選的嗎?
在物件導向程式設計中,在衍生類別中使用建構函式是常見的做法在其超類別中呼叫建構函式。然而,一些開發人員質疑在建構函數中明確指定 super() 的必要性。
編譯器自動呼叫super()
Java 編譯器自動插入對如果子類別建構子未指定超類別建構函數,則可存取超類別的無參數建構函數。這意味著在大多數情況下,省略 super() 不會影響程式的行為。
規則的例外
但是,也有一些情況需要明確調用super() 的情況:
存在參數時的建構子用法
當子類別建構子有參數,子類別建構子有責任將適當的參數傳遞給超類別建構子。除非明確指定,否則編譯器不會自動呼叫帶有參數的超類別建構函式。
範例
考慮以下程式碼:
public class Base {
private Base() {}
}
public class Derived extends Base {
public Derived(int i) {
super(); // Call the default no-args constructor of Base
}
}
在此範例中,衍生建構函式中的 super() 呼叫至關重要,因為 Base 有一個私有的無參數建構子。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3