如果子类没有构造函数,超类也没有,那为什么我可以构造子类的实例呢?

问题描述 投票:0回答:1

来自 https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html: “你不必为你的类提供任何构造函数,但这样做时必须小心。编译器会自动为任何没有构造函数的类提供无参默认构造函数。这个默认构造函数将调用无参构造函数超类的。在这种情况下,如果超类没有无参构造函数,编译器会抱怨,因此您必须验证它是否具有。”

在下面的代码中,类 Goblin 没有构造函数。它的超类 Humanoid 也没有。

public class Humanoid {
    int weight;

    //public Humanoid() {
        //weight = 10;
    //}
}

class Goblin extends Humanoid {
    char armorColor;
}

class Driver {
    public static void main(String[] args) {
        Goblin grug = new Goblin();
        System.out.println(grug.armorColor);

        boolean isGrugAGoblin = false;
        isGrugAGoblin = (grug instanceof Goblin);
        System.out.println(isGrugAGoblin);
    }
}


尽管教程声称编译器会抱怨,但我成功编译并运行了上面的代码。 输出是


true

我预计会出现错误,就像教程声称的那样。教程是不是错了?

java class oop constructor subclass
1个回答
0
投票

Java 中的每个类最终都继承自

java.lang.Object

当您实例化任何类时,都会对其直接超类及其直接超类进行隐式调用,最终到达

Object

© www.soinside.com 2019 - 2024. All rights reserved.