A继承B, B继承C.初始化A将调用C的构造函数



当我准备一个关于OOP的面试时,我遇到了这个问题。

A继承了B, B继承了C。初始化A会调用C的构造函数吗?

我所知道的是构造对象不能被继承。我们必须使用super关键字来引用父类的构造函数。我说的对吗?

子类的构造函数将首先调用其超类的构造函数。如果一个类有多个祖先,这些调用将被堆叠,直到调用最高祖先的构造函数。然后,它将继续执行下一个祖先的构造函数,直到执行所有祖先的构造函数。从这里可以推断,每次创建对象时,都会调用Object类的构造函数,总是

请注意,如果您没有在子类构造函数中添加对super()的调用,编译器将自动为您添加它。如果没有父类的默认构造函数,并且没有在子类的构造函数中指定对父类的特定构造函数的调用,则会得到编译错误。

所有这些规则都在JLS中说明。

在Java世界中,当您扩展另一个类时,您只能看到您的直接超类的构造函数。超类应该正确封装超-超类构造函数。

总是会有一个隐式的调用基类的构造函数。在您的示例中,首先调用C的构造函数,然后调用B的构造函数,最后调用A的构造函数。

使用super是有用的,当你已经定义了重载的构造函数,你想调用一个特定的。

最新更新