首页 > 解决方案 > 默认构造函数链

问题描述

(真或假)如果您编写的构造函数的第一条语句不是对另一个构造函数的调用,则插入一个默认构造函数调用。

这个问题的答案是正确的。然后我尝试并创建了一些链式构造函数。

public class Temp {
     // default constructor 1
    Temp()
    {
        System.out.println("default");
    }

    // parameterized constructor 2
    Temp(int x)
    {
        System.out.println(x);
    }

    public static void main(String args[])
    {

        new Temp(8);
    }
}

输出:

8

“默认”未打印。所以我认为没有调用默认构造函数。答案应该是错误的。有人可以解释为什么吗?

标签: javaconstructordefault-constructor

解决方案


来自Java SE 8 规范

如果构造函数体不是以显式构造函数调用开始,并且被声明的构造函数不是原始类 Object 的一部分,则构造函数体隐式以超类构造函数调用“super();”开始,调用它的直接超类不带参数。

所以a default constructor call in inserted.,但它是你的超类的默认构造函数(在这种情况下Object:)而不是你被声明的类。


推荐阅读