什么都不做的时候调用super()

时间:2014-08-27 20:36:03

标签: java inheritance constructor

在超级构造函数什么也不做的时候,从构造函数中调用super() - 超类的构造函数是什么意思?

Java API正在这样做 - 看到ArrayList一个, 自己调用AbstractList的构造函数。

 protected AbstractList() {    }

AbstractList的唯一构造函数。

没有super()调用,它无论如何都会运行 - 并且具有相同的效果。

TIA。

5 个答案:

答案 0 :(得分:1)

使用默认的超类构造函数,它只是一种风格问题。如果在构造函数的开头没有调用另一个构造函数(super(...)this(...)),则编译器会自动插入对super()的调用。 (唯一免除此规则的类是java.lang.Object。)

答案 1 :(得分:0)

我认为没有意义。我发现有些IDE自动生成代码,当不需要时会使用显式调用super()。我希望他们不会。这是我不在乎的编码风格。

答案 2 :(得分:0)

即使你不在子类的构造函数中调用super(),你的子类也会调用超类。

答案 3 :(得分:0)

首先,除非您使用this()调用另一个构造函数,否则始终会调用超级构造函数。如果您没有在构造函数的开头键入super(),编译器会在那里为您键入它。 (我的意思是它会编译文件,好像你会在那里输入它)

此外,如果你问为什么超级构造函数 at ,如果它什么都不做,那是因为(其中一个原因)超类可以改变,构造函数可以做在较新版本中没有重新编译子类的东西,你已经调用了超级构造函数。

答案 4 :(得分:0)

我认为没有任何实际理由可以使用它本身,因为你是正确的 - 如果没有明确地进行super()构造函数调用,它会被自动调用。

但是,我会在这里扮演魔鬼的拥护者,并说我喜欢拨打super()只是因为它对初始化实际发生的方式更清楚。我发现当你有新的Java开发人员在你完成它之后接管那段特定的代码时,尤其如此 - 没有经验的开发人员将不太可能对如何做出错误的假设事情实际上已经初始化了,并且通常值得过度具体的次要成本。