【问题标题】:default constructor chaining默认构造函数链
【发布时间】:2018-07-19 00:32:15
【问题描述】:

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

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

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

“默认”未打印。所以我认为没有调用默认构造函数。答案应该是错误的。谁能解释一下原因?

【问题讨论】:

  • 它是 true,但是调用的默认构造函数是 super() 构造函数。这里是Object。不是Temp。此外,您没有默认构造函数。你有一个无参数的构造函数。如果您根本添加任何构造函数,那么您将没有默认构造函数。

标签: java constructor default-constructor


【解决方案1】:

来自Java SE 8 Specification

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

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

【讨论】:

    猜你喜欢
    • 2016-07-23
    • 2023-03-20
    • 2010-10-30
    • 2014-05-15
    • 2011-03-12
    • 2018-04-23
    • 1970-01-01
    相关资源
    最近更新 更多