替代构造函数调用

时间:2014-11-22 07:52:45

标签: java constructor

我一直在阅读关于Java中构造函数的 article ,并遇到以下文本:

  

执行实例变量初始值设定项和实例初始值设定项   无论是否为超类构造函数,都会执行   调用实际上显示为显式构造函数调用   声明或自动提供。 (另一种构造函数   调用不执行此额外的隐式执行。)

关于括号中的句子,我有点不清楚。这是否意味着如果我们没有指定要显式调用的备用构造函数,它将不会被隐式调用为this(),对吧?

2 个答案:

答案 0 :(得分:4)

是。它说你总是会打电话给super()构造函数作为构造函数中的第一个语句(除非你使用this(),但是那将是super()调用,因为它是第一个声明 - 或替代呼叫,最终将被调用super()

考虑在假设类的空构造函数中发生了什么,例如Main带有String value字段和三个构造函数,如

private String value;

public Main() {
    this(10); // alternate constructor, super() isn't invoked yet.
}

public Main(int val) {
    this(String.valueOf(val)); // alternate constructor, no super() yet
}

public Main(String str) {
    // super(); // <-- will now implicitly or explicitly super()
    this.value = str;
}

答案 1 :(得分:2)

Base s = new Base();

将自动调用Super()构造函数

但是像参数构造函数这样的替代构造函数实际上不会调用super();

您已明确调用超级类

中的super()super(argument)

Alternate构造函数还包含this(),它将调用Base()构造函数,该构造函数不允许执行super()构造函数,因此不会进行初始化