2012-12-26 63 views
0

我打電話給超類的參數化構造函數,然後它也拋出編譯時錯誤,如沒有默認構造函數爲什麼?因爲根據程序我沒有調用默認的構造函數。默認和參數化構造

class Sup 
{ 
    public Sup(String s) 
    { 
     System.out.println("super"); 
    } 
} 

class Sub extends Sup 
{ 
    public Sub() 
    { 
     System.out.println("sub class"); 
    } 

    public static void main(String arg[]) 
    { 
     Sup s2=new Sup("pavan"); 
    } 
} 
+1

我以爲'b'是'c'之前的東西,但它看起來很像'Java'! –

回答

2

您需要定義的超類的默認構造函數,因爲除非另有規定的基類的構造函數會試圖調用超類,在你的情況下,超類沒有參數的構造函數,所以你得到一個編譯錯誤。

class Sup 
{ 
    public Sup(){} 

    public Sup(String s) 
    { 
     System.out.println("super"); 
    } 
} 

class Sub extends Sup 
{ 
    public Sub() 
    { 
     System.out.println("sub class"); 
    } 

    public static void main(String arg[]) 
    { 
     Sup s2=new Sup("pavan"); 
    } 
} 

或對使用super()父類的構造函數(S)和你的情況下,顯式調用的參數化構造super("some string")

class Sup 
{ 
    public Sup(String s) 
    { 
     System.out.println("super"); 
    } 
} 

class Sub extends Sup 
{ 
    public Sub() 
    { 
     super("some string"); 

     System.out.println("sub class"); 
    } 

    public static void main(String arg[]) 
    { 
     Sup s2=new Sup("pavan"); 
    } 
} 
+0

您無法重寫構造函數。構造函數不會被繼承,因此它們不能被覆蓋。 – Kamil

+0

你是對的我的意思是覆蓋,但它沒有意義,所以已經刪除它 –

1

你的子()構造函數調用默認的構造函數(這是如果你沒有在你沒有提供的Sup類中調用super()或者在你的構造函數的第一行調用另一個構造函數)您應該在Sub()構造函數中添加對Sup(String s)的調用,或者在Sup類中添加默認的no-param構造函數。