Java 子 class 中的构造函数不正确
incorrect constructor in Java child class
谁能帮我理解为什么(在Java)class B 是正确的,而class 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
}
因为在构造函数 C()
中,构造函数 A()
被隐式调用。你无法阻止这种情况,除非调用另一个构造函数。但是构造函数 A()
不存在,只有 A(int)
,因此出错。 (如果您没有编写任何其他构造函数,则默认构造函数仅隐式存在 - 只要您有另一个构造函数,就必须添加默认构造函数,否则它将不存在)。
谁能帮我理解为什么(在Java)class B 是正确的,而class 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
}
因为在构造函数 C()
中,构造函数 A()
被隐式调用。你无法阻止这种情况,除非调用另一个构造函数。但是构造函数 A()
不存在,只有 A(int)
,因此出错。 (如果您没有编写任何其他构造函数,则默认构造函数仅隐式存在 - 只要您有另一个构造函数,就必须添加默认构造函数,否则它将不存在)。