为什么ArrayList构造函数(ArrayList(int initialCapacity))调用其超类的默认构造函数?

时间:2013-09-18 08:26:02

标签: java arraylist constructor super

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

我知道它试图调用它的超类的默认构造函数,即AbstractList()。但AbstractList()中绝对没有实现。

protected AbstractList() {
}

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

2 个答案:

答案 0 :(得分:4)

AbstractList构造函数什么也不做,这并不意味着它不必被调用。更准确地说,空构造函数实际上什么都不做。当构造函数被调用时,JVM仍会执行操作,即使它是空的。在创建对象时总是必须调用构造函数,并且每个构造函数总是必须首先调用超类构造函数(当然除Object之外)。

如果你不在super()的构造函数中编写ArrayList,默认情况下它仍会被隐含地调用。一些开发人员认为明确地写它是好的风格。声明一个空的默认构造函数也是如此,它也是默认的。尽管这里有点不一致。如果他们坚持相同的惯例,我想它应该是

protected AbstractList() {
    super();
}

答案 1 :(得分:1)

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

知道规范的优秀开发人员(比如你自己)会明白,super()是在构造函数中的任何其他代码之前隐式调用的,如果没有明确指定的话。