有人可以帮我理解为什么(在Java中)B类是正确的,而C类会抛出编译错误?
class A {
int x = 1;
A(int x) { this.x = x; }
}
class B extends A {
B() { super(2); }
B(int x) { super.x = x; } //Error
}
class C extends A {
C() { super.x = 2; } //Error
C(int x) { super.x = x; } //Error
}
答案 0 :(得分:4)
因为在构造函数C()
中,隐式地调用了构造函数A()
。除非通过调用另一个构造函数,否则无法阻止它。但构造函数A()
不存在,只有A(int)
,因此错误。 (如果您没有编写任何其他构造函数,则默认构造函数仅隐式存在 - 只要您有另一个构造函数,就必须添加默认构造函数,否则它将不存在)。