在ArrayList.java
中,为什么ArrayList(int initialCapacity)
构造函数调用super()
?
我知道它试图调用它的超类的默认构造函数,即AbstractList()
。但AbstractList()
中绝对没有实现。
protected AbstractList() {
}
无论如何,在这种情况下,将调用超类的默认构造函数
写super()
需要什么?
答案 0 :(得分:4)
AbstractList
构造函数什么也不做,这并不意味着它不必被调用。更准确地说,空构造函数实际上什么都不做。当构造函数被调用时,JVM仍会执行操作,即使它是空的。在创建对象时总是必须调用构造函数,并且每个构造函数总是必须首先调用超类构造函数(当然除Object
之外)。
如果你不在super()
的构造函数中编写ArrayList
,默认情况下它仍会被隐含地调用。一些开发人员认为明确地写它是好的风格。声明一个空的默认构造函数也是如此,它也是默认的。尽管这里有点不一致。如果他们坚持相同的惯例,我想它应该是
protected AbstractList() {
super();
}
答案 1 :(得分:1)
没有必要写它 - super()
是多余的,但它没有坏处。
知道规范的优秀开发人员(比如你自己)会明白,super()
是在构造函数中的任何其他代码之前隐式调用的,如果没有明确指定的话。