默认构造函数链接

时间:2018-07-19 00:32:15

标签: java constructor default-constructor

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

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

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

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

1 个答案:

答案 0 :(得分:1)

来自Java SE 8 Specification

  

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

所以a default constructor call in inserted.,但是它是您超类的默认构造函数(在本例中为Object),而不是您被声明的类。