簡體   English   中英

從子類調用超類構造函數

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

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