为什么我们不能在子类中显式调用父构造函数?

时间:2018-12-21 10:35:12

标签: java

我有点困惑为什么我们不能在子类构造函数中显式调用父构造函数。如果我们谈论方法,可以在子构造函数内部轻松调用。

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

4 个答案:

答案 0 :(得分:2)

如果要调用超类的构造函数,请使用

G() {
  super();
}

答案 1 :(得分:1)

您可以调用它,但是使用的语法错误。使用:

G() {
    super();
}

super()调用超类构造函数。


仅当创建类的对象时,才调用构造函数。您不能简单地称呼它(这就是设计语言的方式)。在您的情况下,您可以创建一个对象,该对象将依次调用构造函数。

G() {
    new F();
}

答案 2 :(得分:0)

Java编译器可以告诉您需要通过关键字super调用 this 实例的父类构造函数。如果您显式键入构造函数名称,则无法得知需要在哪个实例中调用构造函数方法。这就是为什么您需要使用关键字new来指示您需要在 new 实例中调用构造方法的原因。

答案 3 :(得分:-1)

如果要创建新对象,则必须使用“ new”关键字:

new F();