Java 为什么我们需要ArrayList构造函数中的super()?

Java 为什么我们需要ArrayList构造函数中的super()?,java,arraylist,collections,Java,Arraylist,Collections,此代码来自ArrayList源: public ArrayList() { super(); this.elementData = EMPTY_ELEMENTDATA; } protected AbstractList() { } 此代码来自AbstractList源代码: public ArrayList() { super(); this.elementData = EMPTY_ELEMENTDATA; } protected AbstractList(

此代码来自ArrayList源:

public ArrayList() {
    super();
    this.elementData = EMPTY_ELEMENTDATA;
}
protected AbstractList() {
}
此代码来自AbstractList源代码:

public ArrayList() {
    super();
    this.elementData = EMPTY_ELEMENTDATA;
}
protected AbstractList() {
}
super()做什么?

super()
调用父构造函数

super()


查看此问题一般来说,
super
将使用匹配的参数调用其父构造函数。在本例中,由于
AbstractList
具有隐式无参数构造函数,因此我们使用不带参数的
super()
来调用隐式无参数构造函数

至于原因——在这种情况下,如果不需要在父类中设置字段,那么就没有理由这样做。这可能是一种较旧的编程风格

它没有伤害,而且是自我记录的;它是显式的,因为它调用其父构造函数。尽管如此,我会注意到该构造函数的Javadoc调用了它的调用有用性:

/**
 * Sole constructor.  (For invocation by subclass constructors, typically
 * implicit.)
 */

您更可能看到该构造函数的隐式调用,而不是显式调用。

您想知道
super
通常做什么,或者为什么在这个上下文中使用
super
?不需要吗?你确定吗?好吧,让我重写一下答案,我没有很好地表达自己。编辑:在谷歌搜索之后,我很确定。如果我有一个没有无参数构造函数的父类呢?我需要调用
super
。@Makoto即使父级没有无参数构造函数,
super
不需要实例化孩子们也可以在这里预期
AbstractList
的构造函数实际会做些什么考虑到
AbstractList
从1.2开始就存在,我真的怀疑他们是否预期该构造函数会出现什么。这也可能是遗留下来的问题。我不确定;我必须把源代码的历史记录拉下来告诉你。