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 回答
您已在 constructor
. class A
因此,编译器不提供默认的 0-arg constructor
。
现在,在 中class B1
,您还没有定义任何constructor
,因此编译器在该类中添加了一个默认的 0-arg constructor
,如下所示:-
public B1() {
super();
}
如您所见,Compiler添加了一个super()
调用来调用 的0-arg constructor
,super class
在class A
本例中为 。
现在,由于您的class A
, 没有任何0-arg constructor
,因此出现错误。
因此,您可以0-arg constructor
在 A 类中添加一个:-
public A() {
}
这将解决问题。
或者,0-arg constructor
在您的class B1
显式中添加 a,并添加对of的super()
调用:-1-arg constructor
class A
public B1() {
super(0); // Or any value
}
但是,第二个解决方案中的问题是,从您的每个构造函数中class B1
,您必须显式调用1-arg constructor
of class A
。一旦你错过一个,你会compiler
立即得到一个错误。
因此,我建议与1st option
. 0-arg constructor
在class A
. _ 你们都很好。
基本上你需要在子类中定义一个构造函数,像这样:
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) 隐藏了它,并且当您制作 a 类的对象时,它会显示错误。上面我的代码工作正常。