【发布时间】:2011-11-01 13:12:23
【问题描述】:
在 C++ 中,您可以使用初始化列表在构造函数开始运行之前初始化类的字段。例如:
Foo::Foo(string s, double d, int n) : name(s), weight(d), age(n) {
// Empty; already handled!
}
我很好奇为什么 Java 没有类似的功能。根据Core Java:第 1 卷:
C++ 使用这种特殊的语法来调用字段构造函数。在 Java 中,不需要它,因为对象没有子对象,只有指向其他对象的指针。
这是我的问题:
“因为对象没有子对象”是什么意思?我不明白什么是子对象(我试着查了一下);它们是指扩展超类的子类的实例化吗?
至于为什么Java没有像C++这样的初始化列表,我认为是因为Java中所有字段都已经默认初始化了,也因为Java使用
super关键字来调用super(或 C++ 术语中的基础)-类构造函数。这是正确的吗?
【问题讨论】:
标签: java c++ constructor initialization initialization-list