2013-06-12 36 views
0

我想在java中編譯這個,並得到這個錯誤:error:constructor Miclass in class Miclass can not be applied to given given types。 發生了什麼?錯誤:構造函數Miclass中的類Miclass不能應用於給定的類型;

class Miclass { 
    public int x; 
    private int y; 
    protected int z; 

    public Miclass(int x, int y, int z) { 
     this.x = x; 
     this.y = y; 
     this.z = z; 
    } 
} 

public class A extends Miclass { 
    public static void main(String [] args) { 
      Miclass m_class = new Miclass(2, 4, 8); 
      System.out.println("m_class.x = " + m_class.x); 
      System.out.println("m_class.y = " + m_class.y); 
      System.out.println("m_class.z = " + m_class.z); 
    } 
} 

回答

3

由於已經存在Miclass定義構造函數,你需要在A添加一個構造函數調用此構造函數的超一流:

public class A extends Miclass { 
    public A(int x, int y, int z) { 
     super(x, y, z); 
    } 

    // methods/fields specific to `A` 
    ... 
} 

的代碼不會這樣變化之後編譯對於A,變量y不可見。爲了讓代碼編譯,你可以添加一個getter方法來訪問變量。

1

我必須糾正你的代碼,試試這個,看我的解釋後..

class Miclass { 
     public int x; 
     private int y; 
     protected int z; 

     public Miclass(int x, int y, int z) { 
      this.x = x; 
      this.y = y; 
      this.z = z; 
     } 

     public int getY() 
     { 
      return y; 
     } 

    } 

    public class A { 
     public static void main(String [] args) { 
       Miclass m_class = new Miclass(2, 4, 8); 
       System.out.println("m_class.x = " + m_class.x); 
       System.out.println("m_class.y = " + m_class.getY()); 
       System.out.println("m_class.z = " + m_class.z); 
     } 
    } 
+0

你應該設置得到'y'因爲'y'設置私人.. –

+0

,你應該刪除'由於在Miclass m_class = new Miclass(2,4,8)中調用了Miclass, –

0
  • Java提供了默認的無參數的構造函數時,纔會有
  • 定義的其它構造在這種情況下,您已經定義了一個構造函數類Miclass 3個INT論點和你有沒有從中延伸Miclass
  • 由於這一點,當一個默認的無參數的構造函數將被提供給一個類,超不打電話A級稱它爲將會完成這是不可能的因爲在Miclass中沒有無參數構造函數,所以要解決這些問題,您必須在超類中創建無參數構造函數或使用3個​​int參數創建構造函數。
  • 也是你的變量是不是在A級可見的,因爲私有變量只能在同一個類中可見
相關問題