首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 類設計:為什麼需要顯式定義無參建構子?

     編輯:程式設計綜合問答

現象

public class Animal {
    public Animal() { } // 這行似乎多餘?
    public void cry() { System.out.print("crying"); }
}

核心原因:繼承鏈上的建構子調用規則

  1. **子類實例化時,必須先調用父類的無參建構子**(隱式 `super()`)。
  2. 若父類**僅定義了帶參建構子**(如 `public Animal(String name)`),編譯器**不會自動生成無參建構子**。
  3. 此時子類若不在建構子首行顯式 `super(參數)`,編譯報錯:`Implicit super constructor Animal() is undefined`。
  4. 在父類顯式加上 `public Animal() {}`,即提供了無參建構子,子類可隱式調用,編譯通過。

最佳實踐

  • **習慣在類中顯式提供無參建構子**,除非刻意禁止無參實例化(如單例、必須帶參初始化)。
  • 若父類有多個建構子,子類建構子首行用 `super(...)` 明確指定調用哪個,避免歧義。
  • 使用 Lombok `@NoArgsConstructor` 可自動生成,減少樣板代碼。

總結

「多餘」的 `public Animal() {}` 實際上是**為了繼承體系的正常運作而預留的無參建構子**,是良好的防禦性編程習慣。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved