[英]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.