Java 为什么可以';我们不能在子类中显式调用父构造函数吗?

Java 为什么可以';我们不能在子类中显式调用父构造函数吗?,java,Java,我有点困惑为什么我们不能在子类构造函数中显式调用父构造函数。若我们谈论方法,它可以很容易地在子构造函数中调用 class F { F() { System.out.println("F"); } } class G extends F { G() { F(); } public static void main(String args[]){ new G(); } } G() {

我有点困惑为什么我们不能在子类构造函数中显式调用父构造函数。若我们谈论方法,它可以很容易地在子构造函数中调用

class F {
     F() {
        System.out.println("F");
     }
}

class G extends F {

    G() {
        F();
    }
    public static void main(String args[]){
        new G();
    }
 }
G() {
    new F();
}
输出


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

G() {
    super();
}
super()
调用超级类构造函数

class F {
     F() {
        System.out.println("F");
     }
}

class G extends F {

    G() {
        F();
    }
    public static void main(String args[]){
        new G();
    }
 }
G() {
    new F();
}

只有在创建类的对象时才调用构造函数。你不能简单地称之为它(语言就是这样设计的)。在您的例子中,您可以创建一个对象,该对象反过来调用构造函数

class F {
     F() {
        System.out.println("F");
     }
}

class G extends F {

    G() {
        F();
    }
    public static void main(String args[]){
        new G();
    }
 }
G() {
    new F();
}

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

G() {
  super();
}

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


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

您可以使用
super()调用父级构造函数我想调用显式..@AshwiniPandey您所能做的就是调用super()(在本例中是隐式的)。不,我想显式调用,因为构造函数不能像普通函数一样直接调用,所以您需要
new
操作符。我知道………但是为什么不能显式调用呢?由于一个类只有一个超类,super()尽可能显式。@AshwiniPandey因为Java中调用超类构造函数的正确语法是使用
super
,而不是使用超类的名称。Java就是这样设计的。抱怨你想要的不同是没有用的。。。你为什么想要这个?我知道…………但为什么不能明确地给出答案。@AshwiniPandey,因为语言就是这样设计的