簡體   English   中英

找不到符號符號:構造函數A()位置:類A.

[英]cannot find symbol symbol : constructor A() location: class A

class A {
     A(int i){    
        System.out.println("A(int)");
     }
 }

class B1 extends A{
    public static void main(String args[]){
        A ob=new A(2);  
    }
}

您已在class A聲明了1-arg constructor 因此, 編譯器不提供默認的0-arg constructor

現在,在class B1 ,您還沒有定義任何constructor ,因此編譯器在該類中添加了一個默認的 0-arg constructor ,如下所示:

public B1() {
    super();
}

正如您所看到的, 編譯器添加了一個super()調用來調用super class0-arg constructor ,在本例中是class A

現在,因為你的class A ,沒有任何0-arg constructor ,因此出錯。


所以,你可以在你的類A中添加一個0-arg constructor : -

public A() {

}

這將解決問題。


或者,class B1顯式添加0-arg constructor函數,並向class A1-arg constructor添加super()調用: -

public B1() {
    super(0);  // Or any value
}

但是,第二個解決方案中的問題是,從class B1每個構造函數中,您必須顯式調用class A1-arg constructor函數。 一旦錯過了一個,您將立即收到compiler錯誤。

所以,我建議1st option class A添加一個0-arg constructor 你們都很好。

基本上你需要在子類中定義一個構造函數,如下所示:

class B1 extends A{

    public B1(int x){
       super(x);
    }

    ...
}

要么

在A類中添加默認構造函數。

 class A {

    A(){
    }
    A(int i){    
        System.out.println("A(int)");
     }
 }

class B1 extends A{
    public static void main(String args[]){
        A ob=new A(2);  
    }
}

在這種情況下你必須給出默認的構造函數,因為A(int i)隱藏它,當你創建類的對象時它顯示錯誤。上面我的代碼工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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