簡體   English   中英

當超類沒有構造函數時,如何在子類中聲明構造函數

[英]How to declare a constructor in a subclass when the superClass does not have a constructor

我正在嘗試為子類實現構造函數,但是在編譯時,我不斷收到"error: class, interface, or enum expected"

我的總體代碼如下所示:

public class Super{
    //methods go here, no constructor.
}

這是我嘗試過的方法,但是沒有用:

public class Sub extends Super{
    private boolean myCondition;
    public Sub(boolean condition){
        super();
        myCondition = condition;
    }
}

我假設我不需要在subs構造函數中調用super(),因為編譯器應隱式調用它。

謝謝。

每個類都有一個構造函數。 如果不指定,則將獲得默認的構造函數。 JLS-8.8.9默認構造函數

如果一個類不包含構造函數聲明,則隱式聲明一個沒有形式參數且沒有throws子句的默認構造函數。

如果要聲明的類是原始類Object,則默認構造函數的主體為空。 否則,默認構造函數將簡單地調用不帶參數的超類構造函數。

如果隱式聲明了默認構造函數,但超類沒有可訪問的構造函數(第6.6節),該構造函數不帶參數且不包含throws子句,則這是編譯時錯誤。

在類類型中,如果將該類聲明為public,則默認構造函數被隱式賦予訪問修飾符public(第6.6節); 如果該類被聲明為受保護的,則默認構造函數被隱式賦予訪問修飾符保護(第6.6節); 如果該類被聲明為私有,則默認構造函數被隱式賦予訪問修飾符私有(第6.6節); 否則,默認構造函數具有無訪問修飾符暗含的默認訪問權限。

因此, Super (一個public類)在編譯器中插入了一個默認的構造函數,看起來像

public Super() {
  super();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM