0

ArrayList.java,为什么ArrayList(int initialCapacity)构造函数调用super()

我知道它正在尝试调用其超类的默认构造函数,即AbstractList(). 但是绝对没有实现AbstractList()

protected AbstractList() {
}

无论如何,在这种情况下将调用超类的默认构造函数。
需要写super()什么?

4

2 回答 2

4

构造函数什么都不做的事实AbstractList并不意味着它不必被调用。更准确地说,一个空的构造函数实际上并没有做任何事情。当构造函数被调用时,即使它是空的,JVM 仍然会做一些事情。创建对象时总是必须调用构造函数,并且每个构造函数总是必须首先调用超类构造函数(Object当然除外)。

如果您不写入super()的构造函数ArrayList,则默认情况下仍会隐式调用它。一些开发人员认为明确地编写它只是一种很好的风格。声明一个空的默认构造函数也是如此,这也是默认的。尽管这里有一点不一致。如果他们坚持相同的约定,我想应该是

protected AbstractList() {
    super();
}
于 2013-09-18T08:31:00.613 回答
1

没有必要写它 -super()是多余的,但它没有害处。

了解规范的优秀开发人员(就像你自己一样)会理解super()在构造函数中的任何其他代码之前隐式调用的,如果没有明确指定的话。

于 2013-09-18T08:44:44.597 回答