Java 为什么ArrayList';s构造函数(ArrayList(int initialCapacity))调用其超类';默认构造函数是什么?

Java 为什么ArrayList';s构造函数(ArrayList(int initialCapacity))调用其超类';默认构造函数是什么?,java,arraylist,constructor,super,Java,Arraylist,Constructor,Super,在ArrayList.java中,为什么ArrayList(int initialCapacity)构造函数调用super() 我知道它正试图调用其超类的默认构造函数,即AbstractList()。但是AbstractList()中绝对没有实现 无论如何,在这种情况下将调用超类的默认构造函数。 编写super()需要什么?事实上AbstractList构造函数什么都不做,并不意味着不需要调用它。更准确地说,空构造函数实际上什么也不做。JVM在调用构造函数时仍然会执行一些操作,即使构造函数是空的

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

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

无论如何,在这种情况下将调用超类的默认构造函数。

编写
super()
需要什么?

事实上
AbstractList
构造函数什么都不做,并不意味着不需要调用它。更准确地说,空构造函数实际上什么也不做。JVM在调用构造函数时仍然会执行一些操作,即使构造函数是空的。在创建对象时,始终必须调用构造函数,并且每个构造函数都必须首先调用超类构造函数(当然,除了
对象

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

protected AbstractList() {
    super();
}

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

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

protected AbstractList() {
    super();
}

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


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

没有必要编写它-
super()
是多余的,但不会造成伤害


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

如果未指定构造函数,则必须调用超类构造函数,super()。即使构造函数为空,事情也会在幕后进行。显式地调用它可能是对作者的某种暗示(例如,提醒人们不要“更正”它以放入另一个构造函数),并不是所有的代码都是用于计算机的
super()
,正如您所说的那样。我认为显式调用只是风格的问题。一些带有一些样式检查的IDE(eclipse)可以在没有超显式调用时用一个可笑的警告图标来标记构造函数。所以我可以说这更像是一种编码约定。但它背后没有功能逻辑。感谢所有的输入。如果没有指定构造函数,则必须调用超级类构造函数super()。即使构造函数为空,事情也会在幕后进行。显式地调用它可能是对作者的某种暗示(例如,提醒人们不要“更正”它以放入另一个构造函数),并不是所有的代码都是用于计算机的
super()
,正如您所说的那样。我认为显式调用只是风格的问题。一些带有一些样式检查的IDE(eclipse)可以在没有超显式调用时用一个可笑的警告图标来标记构造函数。所以我可以说这更像是一种编码约定。但它背后没有功能逻辑。谢谢大家的意见。谢谢你们把我称为一名优秀的开发人员,也谢谢你们的回答:)谢谢你们把我称为一名优秀的开发人员,也谢谢你们的回答:)是的@stonedsquirrel我同意你们的观点。如果他们遵循一个编码标准,那么受保护的AbstractList()和受保护的AbstractCollection()也应该包含super(),但目前它不包含yes@stonedsquirrel,我同意你的观点。如果它们遵循一个编码标准,那么受保护的AbstractList()和受保护的AbstractCollection()也应该包含super(),但目前没有