https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html: "你不需要为你的类提供任何构造函数,但在这样做的时候必须小心.编译器自动为任何没有构造函数的类提供无参数的默认构造函数.这个默认构造函数将调用超类的无参数构造函数.在这种情况下,compiler will complain如果超类没有无参数构造函数,那么您必须验证它有."

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

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);
    }
}


我成功地编译并运行了上面的代码,尽管教程声称编译器会抱怨. 其yields 是


true

我预料到了一个错误,就像教程中所说的那样.教程错了吗?

推荐答案

Java中的每个类最终都继承自java.lang.Object.这就是为什么你的类有equalstoString这样的方法.

当你实例化任何类时,会对它的直接超类以及它的直接超类进行隐式调用,直到最终达到Object.

在你的情况下,Humanoid延伸java.lang.Object.

类Goblin没有构造函数

不正确.

Goblin没有explicit构造函数它有一个implicit构造函数.把它看作是编译器在你背后代表你编写构造函数.

有关更多信息,请参阅this Answer by OrangeDog to the Question,Java default constructor.

它的超类人类也不知道

我也是Humanoid有一个隐式默认构造函数.

有关所有细节,请参见第8.8.9. Default Constructor节.

Java相关问答推荐

Java 22模式匹配不适用于记录模式匹配.给出汇编问题

如何为具有多对多关系的实体的给定SQL查询构建JPA规范?

@ EnableRouting注释在Kotlin项目中不工作

OpenJDK、4K显示和文本质量

滚动视图&不能在alert 对话框中工作(&Q;&Q;)

如何正确创建序列图?

我不能再在Android Studio Hedgehog上用Java语言创建新项目了吗?

从Spring5迁移到Spring6:无法在雅加达包中找到类

什么是Java原子属性的正确getter和setter

生成桥方法以解决具有相同擦除的冲突方法

无法在Java中处理PayPal支付响应

Java Mooc.fi Part 12_01.Hideout -返回和删除方法

在学习Spring时,通过构造函数参数0表达了不满意的依赖关系

没有Tomcat,IntelliJ如何在本地运行API?

如何对存储为字符串的大数字数组进行排序?

如何设计包含已知和未知键值对映射的Java类?

模拟JUnit未检测到返回字符串的方法的任何声纳覆盖

如何将RESTAssured';S的Http标题转换为<;字符串、字符串和>的映射?

javax.crypto-密码对象-提供者服务是如何工作的?

转换为JSON字符串时,日期按天递减-Java