我试图理解为什么这段代码会编译:
public class A {
}
public class B extends A {
public B() {
}
}
虽然这段代码没有:
public class A {
public A(int n) {
}
}
public class B extends A {
public B() {
}
}
我的意思是,在这两种情况下A类都没有空白构造函数吗?如果是这样,为什么它不起作用?
提前致谢
答案 0 :(得分:6)
当超类只有带args的构造函数时,你需要从你的子类显式调用你的超类的构造函数,如下所示。
public B() {
super(2);// passing an int value to your super class cons
}
在这两种情况下A类都没有空白构造函数吗?
没有。如果声明构造函数,那么编译器将不包含默认构造函数,因此在{2}中class A
没有默认的no-args构造函数,并且必须从子类构造函数显式地进行超级调用