2014-10-27 94 views
0

我嘗試在子類的主要方法中創建父實例。它顯示錯誤:「類A中的構造函數A不能應用於給定的類型」。請告訴我爲什麼我的代碼不起作用。由於從子類的主要方法創建父實例

class A 
{ 
    protected int a; 
    A(int a) { 
     this.a = a; 
    } 
} 

class Test extends A 
{ 
    public static void main(String[] args) { 
     int a = 10; 
     A instance = new A(a); 
    } 
} 

回答

1

的問題是不是線

A instance = new A(a); 

的問題是,你還沒有定義的測試任何構造函數,編譯器應該提供以下形式之一:

Test() { 
    super(); 
} 

但它不能因爲超類(A)沒有任何默認的構造函數。所以,你需要explivitely提供一個構造函數:

Test() { 
    super(0); 
} 

Test(int i) { 
    super(i); 
} 

例如。

0

你的行沒有錯A instance = new A(a);這不是你的編譯錯誤來自的地方。

在A類已經定義了一個構造A(int a)其防止默認(無參數)構造被自動生成。

你得到編譯錯誤的原因是你用class Test extends A擴展A而不是調用你的超類的構造函數。它正在尋找一個默認構造函數爲A級。