[英]Calling super class constructor from subclass
class Top {
public Top(String s) {
System.out.print("B");
}
}
public class Bottom2 extends Top {
public Bottom2(String s) {
super();
System.out.print("D");
}
public static void main(String [] args) {
Bottom2 as=new Bottom2("A");
new Bottom2("C");
System.out.println(" ");
}
}
我想調用超類構造函數。 為什么不編譯?
對super()
的調用意味着在基類中有一個默認構造函數。 您的示例未顯示該內容,因此代碼無法編譯。
因此,為了使其正常工作,只需在子類中添加如下調用:
public Bottom2(String s)
{
super(s); // call to superclass constructor with parameters.
System.out.print("D");
}
您正在調用super()
,而不是super(s)
。 當您使用參數化的構造函數時,就無法再使用默認的no-arg構造函數,這就是為什么super()
無法編譯的原因。
您的超類構造函數包含1個字符串參數,並且您沒有使用參數調用超類
在代碼super();中
應該是這樣的
super(“任何字符串”);
該程序將給出編譯時錯誤。 必須在類Top中包含默認構造函數Top()
首先,它將產生編譯時錯誤(因為如果子類中有arguments-constructor,那么在基類中必須沒有-arg構造函數),其次,編譯器將隱式調用基類的no-arg構造函數(如果沒有其他對超類構造函數或子類構造函數的調用)。 所以你不應該寫
super();
所以你應該明確地打電話
super(s);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.