我们需要在ArrayList构造函数中使用super()吗?

时间:2014-11-28 17:05:58

标签: java arraylist collections

来自ArrayList source的代码:

public ArrayList() {
    super();
    this.elementData = EMPTY_ELEMENTDATA;
}

来自AbstractList源码的这段代码:

protected AbstractList() {
}

super()做什么?

2 个答案:

答案 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?