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);
}
}
答案 0 :(得分:9)
您已在constructor
中声明 1-arg class A
。因此,编译器不提供默认0-arg constructor
。
现在,在class B1
中,您尚未定义任何constructor
,因此编译器会添加默认 0-arg 该类中的em> 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)隐藏它,当你创建它的对象时,它会显示出来 错误。上面我的代码工作正常。