Java 为什么我们需要ArrayList构造函数中的super()?
此代码来自ArrayList源: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(
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开始就存在,我真的怀疑他们是否预期该构造函数会出现什么。这也可能是遗留下来的问题。我不确定;我必须把源代码的历史记录拉下来告诉你。