以下代码给出编译错误:
class parent {
parent(int a){}
}
class child extends parent{}
错误:
Main.java:6: cannot find symbol
symbol : constructor parent()
location: class parent
class child extends parent{}
^
1 error
我尝试做不同的事情,发现向父构造函数添加返回类型可以消除错误!!!
class parent {
int parent(int a){}
}
class child extends parent{}
我读到构造函数不应该有返回类型,这显然不是一直都是正确的。所以我的问题是我们什么时候应该有构造函数的返回类型?
最佳答案
在情况 1 中,子类没有任何构造函数,因此编译器会为您添加一个默认构造函数,并添加对父类(super class)构造函数的调用。所以你的子类实际上看起来像:
class child extends parent {
child() {
super();
}
}
调用 super()
在基类中查找零参数构造函数,因为没有这样的构造函数,所以会出现错误。
在情况2中父父类没有任何构造函数
int parent(int x) {}
不是构造函数,因为它有返回类型。它只是一个具有类名的方法。子类也没有任何构造函数。因此编译器为子类和父类添加了默认构造函数,还添加了对父类(super class)构造函数的调用:
class parent {
parent() {
super(); // calls Object class ctor.
}
int parent(int x) {} // not a ctor.
}
class child extends parent {
child() {
super();
}
}
关于java - 我们可以为 Java 中的构造函数提供返回类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3501680/