【问题标题】:cannot find symbol symbol : constructor A() location: class A找不到符号符号:构造函数 A() 位置:A 类
【发布时间】:2012-11-12 13:12:41
【问题描述】:
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);  
    }
}

【问题讨论】:

  • 以后,请在您的内容中添加一个问题。纯代码,在这里可能很清楚,但并不总是如此。

标签: java class object inheritance constructor


【解决方案1】:

你在class A 中声明了一个1-arg constructor。所以,compiler 不提供 default 0-arg constructor.

现在,在class B1 中,您还没有定义任何constructor,所以编译器 添加了一个默认 0-arg @987654326 @ 在那个类中,看起来像这样:-

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。你们都很好。

【讨论】:

  • @KumarVivekMitra, vels4j.. 谢谢 :)
【解决方案2】:

基本上你需要在子类中定义一个构造函数,像这样:

class B1 extends A{

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

    ...
}

在类 A 中添加一个默认构造函数。

【讨论】:

    【解决方案3】:
     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) 隐藏它,当你制作 a 类的对象时,它会显示 错误。上面我的代码工作正常。

    【讨论】:

    • 实际上您发布的代码可以正常工作。但是你给出的解释很混乱。它表明,使用 1-arg 构造函数创建类 A 的实例也需要 0-arg 构造函数。事实并非如此。请参阅我的答案以获得更好的解释/
    猜你喜欢
    • 1970-01-01
    • 2014-12-12
    • 2013-01-16
    • 2012-05-23
    • 1970-01-01
    • 2018-04-13
    • 2012-12-17
    • 2017-03-21
    • 1970-01-01
    相关资源
    最近更新 更多