我有点困惑为什么我们不能在子类构造函数中显式调用父构造函数。如果我们谈论方法,可以在子构造函数内部轻松调用。
class F {
F() {
System.out.println("F");
}
}
class G extends F {
G() {
F();
}
public static void main(String args[]){
new G();
}
}
输出
G.java:8: error: cannot find symbol F(); symbol: method F() location: class G 1 error
答案 0 :(得分:2)
如果要调用超类的构造函数,请使用
G() {
super();
}
答案 1 :(得分:1)
您可以调用它,但是使用的语法错误。使用:
G() {
super();
}
super()
调用超类构造函数。
仅当创建类的对象时,才调用构造函数。您不能简单地称呼它(这就是设计语言的方式)。在您的情况下,您可以创建一个对象,该对象将依次调用构造函数。
G() {
new F();
}
答案 2 :(得分:0)
Java编译器可以告诉您需要通过关键字super
调用 this 实例的父类构造函数。如果您显式键入构造函数名称,则无法得知需要在哪个实例中调用构造函数方法。这就是为什么您需要使用关键字new
来指示您需要在 new 实例中调用构造方法的原因。
答案 3 :(得分:-1)
如果要创建新对象,则必须使用“ new”关键字:
new F();