当你从子类的构造函数中调用super()
时,它应该在父类没有arg构造函数时抛出编译时异常。但是由于Object类有一个没有arg的构造函数,实际上会抛出这个异常吗?
答案 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的构造函数,否则子类中不会出现任何编译问题。