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