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

3 回答 3

9

您已 constructor. class A因此,编译器不提供默认的 0-arg constructor

现在,在 中class B1,您还没有定义任何constructor,因此编译器在该类中添加了一个默认的 0-arg constructor,如下所示:-

public B1() {
    super();
}

如您所见,Compiler添加了一个super()调用来调用 的0-arg constructorsuper classclass A本例中为 。

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


因此,您可以0-arg constructor在 A 类中添加一个:-

public A() {

}

这将解决问题。


或者,0-arg constructor在您的class B1显式中添加 a,并添加对of的super()调用:-1-arg constructorclass A

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

但是,第二个解决方案中的问题是,从您的每个构造函数中class B1,您必须显式调用1-arg constructorof class A。一旦你错过一个,你会compiler立即得到一个错误。

因此,我建议与1st option. 0-arg constructorclass A. _ 你们都很好。

于 2012-11-24T13:07:43.673 回答
0

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

class B1 extends A{

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

    ...
}

或者

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

于 2012-11-24T13:09:55.193 回答
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) 隐藏了它,并且当您制作 a 类的对象时,它会显示错误。上面我的代码工作正常。

于 2012-11-24T13:36:22.080 回答