找不到符号符号:构造函数A()位置:类A.

时间:2012-11-24 13:04:48

标签: java class object inheritance constructor

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);  
    }
}

3 个答案:

答案 0 :(得分:9)

您已在constructor中声明 1-arg class A。因此,编译器不提供默认0-arg constructor

现在,在class B1中,您尚未定义任何constructor,因此编译器会添加默认 0-arg constructor,如下所示: -

public B1() {
    super();
}

如您所见,编译器添加super()调用以调用0-arg constructor的{​​{1}},super class,情况下。

现在,由于您的class A没有任何 0-arg class A,因此错误。


所以,你可以在你的班级A中添加constructor: -

0-arg constructor

这将解决问题。


或者,明确地在public A() { } 添加0-arg constructor,并向class B1 super()添加1-arg constructor来电class A : -

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

但是,第二个解决方案中的问题是,从class B1的每个构造函数中,您必须明确地调用1-arg constructor class A。一旦错过,您将立即收到compiler错误。

所以,我建议你去1st option。在0-arg constructor中添加class A。你们都很好。

答案 1 :(得分:0)

基本上你需要在子类中定义一个构造函数,如下所示:

class B1 extends A{

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

    ...
}

OR

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

答案 2 :(得分:0)

 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)隐藏它,当你创建它的对象时,它会显示出来   错误。上面我的代码工作正常。