来自ArrayList source的代码:
public ArrayList() {
super();
this.elementData = EMPTY_ELEMENTDATA;
}
来自AbstractList源码的这段代码:
protected AbstractList() {
}
super()做什么?
答案 0 :(得分:4)
通常,super
将使用匹配的参数调用其父构造函数。在这种情况下,因为AbstractList
具有隐式的无参数构造函数,所以我们使用没有参数的super()
来调用隐式的无参数构造函数。
至于为什么 - 在这种情况下,如果不需要在父类中设置字段,则没有理由这样做。这可能是较旧的编程风格。
它没有任何伤害,它是自我记录的;它是明确的,因为它调用其父的构造函数。虽然,我会注意到该构造函数的Javadoc调用了它的调用有用性:
/**
* Sole constructor. (For invocation by subclass constructors, typically
* implicit.)
*/
您更有可能看到该构造函数的隐式调用,而不是您的显式调用。
答案 1 :(得分:-1)
super()
调用父构造函数。
super()
,但编写它并不是一个坏习惯,因为它有利于可读性 - 它会提醒你调用父构造函数。
请参阅此问题When do you need to explicitly call a superclass constructor?