3

我在我的一篇试卷中看到了这个问题:

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

我想知道这个问题是否有效?

4

7 回答 7

4

因此,在您开始弄乱派生对象中的继承功能之前,您可能拥有一个“Base”类型的有效对象!

于 2010-05-28T05:23:04.310 回答
3

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

于 2010-05-28T05:31:54.497 回答
2

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

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

于 2010-05-28T05:28:01.057 回答
1

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

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

类构造的一个可见部分是字段的初始化。但还有更多内容(内存分配、注册等)。所有这些都必须在创建派生类时对所有超类完成。

于 2010-05-28T05:45:46.007 回答
1

因为基类可能会做你不知道的工作。

于 2010-05-28T05:22:27.167 回答
1

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

于 2010-05-28T05:22:32.970 回答
1

由于派生类构造函数要继承基类构造函数,所以需要调用基类构造函数。否则,如果不这样做,您将不会继承在基类构造函数中初始化的值。

于 2010-05-28T05:26:50.903 回答