继承自B,B继承自C.将初始化C的一个invoke构造函数?

时间:2014-06-24 19:49:50

标签: java oop constructor

当我准备接受有关OOP的采访时,我遇到了这个问题。

继承形式B. B继承自C. 将初始化A调用C?

的构造函数

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

3 个答案:

答案 0 :(得分:5)

子类的构造函数将首先调用其超类的构造函数。如果一个类有几个祖先,这些调用将被堆叠,直到调用顶级祖先的构造函数为止。然后,它将继续执行下一个祖先的构造函数,直到执行了祖先的所有构造函数。您可以从这里推断每次创建对象时,都会调用Object类的构造函数,始终

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

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

答案 1 :(得分:2)

在Java世界中,当你扩展另一个课程时,你只能看到你的直接超级课程。构造函数。超类应该适当地封装超级超类构造函数。

答案 2 :(得分:1)

对基类的构造函数始终存在隐式调用。在您的情况下,将首先调用C的构造函数,然后调用B的构造函数,最后调用A的构造函数。

当您定义了重载的构造函数并且想要调用特定的构造函数时,使用super非常有用。