建構子中 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中文網其他相關文章!