为什么派生类构造函数总是访问基类构造函数?

时间:2010-05-28 05:20:23

标签: java derived-class base-class

我在一篇问题论文中看到了这个问题:

为什么派生类构造函数总是访问基类构造函数?

我想知道问题是否有效?

7 个答案:

答案 0 :(得分:4)

在开始搞乱派生对象中的继承功能之前,你可能有一个类型为“Base”的有效对象!

答案 1 :(得分:3)

无效。它没有'应该':它 必须 ,并且编译器通过调用基类的默认构造函数(如果它存在)强制执行它,并且如果它存在则给出编译错误没有,这迫使你调用现有的一个构造函数。

答案 2 :(得分:2)

总是有一个例外,超类中的默认构造函数通常不会被称为显式。

如果构造函数没有显式调用超类构造函数,Java编译器会自动插入对超类的无参数构造函数的调用。如果超类没有无参数构造函数,则会出现编译时错误。对象确实有这样的构造函数,因此如果Object是唯一的超类,则没有问题。

答案 3 :(得分:1)

因为基类可能会起作用,所以你不知道。

答案 4 :(得分:1)

因为基类可能包含需要初始化的成员。

答案 5 :(得分:1)

由于派生类构造函数想要从基类构造函数继承,因此必须调用基类构造函数。否则,如果不这样做,则不会继承在基类构造函数中初始化的值。

答案 6 :(得分:1)

调用超类构造函数不是必须,而 应与强建议配对 - 只要超类具有默认构造函数。否则,编译器会强制您至少调用其中一个超类构造函数。

如果存在默认构造函数,则无论如何都会调用它,即使子类construtor中没有显式的super()语句也是如此。

类构造的可见部分是字段的初始化。但还有更多内幕(内存分配,注册等)。在创建派生类时,必须为所有超类完成所有这些操作。