为什么我们不能在 Java 中使用 child class 方法中的 super 关键字调用 super class 构造函数?

Why can't we call super class constructor using super keyword from child class method in Java?

我是 java 的新手,所以我对上面的标题问题没有什么困惑。

谁能帮我搞定这个?

提前致谢。

考虑以下情况:

class Father {
    Father() {}
}

class Son extends Father {
    Son() {
        super();
    }

    void foo() {
        super(); //won't compile
    }
}

可以写Father f = new Father();构造一个Father,但不能非法写super f = super().

否则会出现两个问题:

(1) super 是什么?编译器应该如何编译关键字super呢?如果进一步扩展 Son 那么编译器可能无法确定实际的 class super() returns.

(2)关键字this有歧义。你是说 this = super() (类似于构造函数中的用法,但在这种情况下会很奇怪),还是你想创建 superclass?

的实例

如果真想动态获取实例,最多只能用反射:

try {
    Object o = this.getClass().getSuperclass().newInstance();
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
}

但这似乎很危险。总而言之,您应该使用 Father f = new Father() 创建一个 Father 实例,或者使用关键字 this 来引用 Son 实例(它继承了 Father) 直接。

在Java中,每个关键字都有自己的含义...例如要定义一个新的class,我们使用'class'关键字。每个关键字都保留做特定的事情。基本上,当您键入关键字时,它是对 jvm 的指令,并且 jvm 知道在遇到特定关键字时需要做什么。同样,super() 被设计为仅在 subclass 构造函数中调用,这样当您实例化 subclass 的对象时,super class 默认值也将被实例化。因此它确保在实例化子 class 实例时,超级 class 默认值也将被实例化。现在,如果你想在你的方法中创建一个超级 class 对象,你可以使用 new 关键字。