首頁 > Java > java教程 > 為什麼Java中的建構函式不被繼承?

為什麼Java中的建構函式不被繼承?

Barbara Streisand
發布: 2024-11-29 22:39:11
原創
778 人瀏覽過

Why Are Constructors Not Inherited in Java?

理解 Java 中的構造函數繼承

儘管人們普遍期望,構造函數在 Java 中並不是繼承的。這項設計決策引發了開發人員的好奇心和疑問。

建構子不繼承的原因

考慮以下範例:

public class Super {
  public Super(ServiceA serviceA, ServiceB serviceB, ServiceC serviceC){
    this.serviceA = serviceA;
    //etc
  } 
}
登入後複製

如果建構子是繼承的,則每個類別(包括最終從Object 派生的類別)都將擁有一個無參數建構子。這會造成邏輯困境,尤其是在以下情況下:

FileInputStream stream = new FileInputStream();
登入後複製

在沒有任何指定參數的情況下,該行應該執行什麼操作?

非繼承的優點

建構子繼承的缺失確保子類別需要特定的參數來實例化,這些參數可能與其子類別所需的參數不同超類。這可以防止在創建物件時出現意外或不一致的行為。

替代解決方案

為了解決重複和 DRY 問題,Java允許建立明確「傳遞」子類別中的建構子將參數轉發給超類別建構函數,如下所示:

public class Son extends Super{
  public Son(ServiceA serviceA, ServiceB serviceB, ServiceC serviceC){
    super(serviceA,serviceB,serviceC);
  }
}
登入後複製

雖然這種方法增加了一些冗餘,但它優先考慮對象實例化的清晰度和控制,有效地取代不存在的繼承建構子。

以上是為什麼Java中的建構函式不被繼承?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板