编译来自子构造函数的super()调用的时间异常

时间:2016-01-08 07:04:53

标签: java exception

当你从子类的构造函数中调用super()时,它应该在父类没有arg构造函数时抛出编译时异常。但是由于Object类有一个没有arg的构造函数,实际上会抛出这个异常吗?

3 个答案:

答案 0 :(得分:5)

首先,它不是例外:它是编译时错误。那是一个不同的野兽。

规则说如果你调用super()(不带参数),那么类应该有一个无参数的构造函数。父母在这里意味着:直接父母,而不是祖父母或祖父母。那是因为构造函数不是继承的。

尽管类Object(它始终是任何其他类的祖先)具有不带参数的构造函数,但这并没有什么区别,因为来自Object的构造函数只能访问其直接子类;它们不能被子类(孙子)的子类访问,并且可以进一步访问。

答案 1 :(得分:1)

https://docs.oracle.com/javase/tutorial/java/IandI/super.html

  

如果Object是 only 超类,则没有问题。

由于super()调用直接超类的构造函数,直接超类需要有一个无参数构造函数。不考虑继承层次结构中的更高级别。

答案 2 :(得分:-1)

Object类是每个类的父类。因此默认情况下,每个类都没有arg构造函数。因此,除非您的父类具有带arg的构造函数,否则子类中不会出现任何编译问题。