你能帮我理解为什么下面的代码会出现编译错误吗? 如果我删除 Foo2 的构造函数,它就可以正常工作。
class Foo2 {
int st;
protected Foo2(int initialVal) {
this.st = initialVal;
}
}
public class Main extends Foo2 {
int st;
private Main(int initialVal) {
this.st = initialVal;
}
public static void main(String args[]) {
Foo2 f = new Main(2);
}
}
最佳答案
Main
类的构造函数隐式调用 super()
。但由于您的 Foo2
类有一个带参数的构造函数,编译器不会为其生成无参数构造函数,因此隐式 super()
调用无效。
您可以通过删除现有的 Foo2
构造函数(就像您所做的那样)或向 Foo2
添加第二个(无参数)构造函数或添加 来解决此问题>super(someIntValue);
作为 Main
构造函数的第一条语句调用。
这是第三种选择:
private Main(int initialVal) {
super(initialVal);
this.st = initialVal;
}
当然,在父类(super class) Foo2
和子类 Main
中都拥有 st
实例变量是没有意义的>.
private Main(int initialVal) {
super(initialVal);
}
会更有意义。
关于具有私有(private)构造函数的 Java 子类会产生编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60166205/