在 C++ 中,您可以使用初始化列表在构造函数开始运行之前初始化类的字段。例如:
Foo::Foo(string s, double d, int n) : name(s), weight(d), age(n) {
// Empty; already handled!
}
我很好奇为什么 Java 没有类似的功能。根据核心 Java:第 1 卷:
C++ 使用这种特殊语法来调用字段构造函数。在 Java 中,不需要它,因为对象没有子对象,只有指向其他对象的指针。
以下是我的问题:
“因为对象没有子对象”是什么意思?我不明白什么是子对象(我试着查了一下);它们是指扩展超类的子类的实例化吗?
至于为什么 Java 没有像 C++ 这样的初始化列表,我认为原因是因为 Java 中默认情况下已经初始化了所有字段,还因为 Java 使用
super
关键字来调用 super(或 C++ 术语中的 base)-class 构造函数. 它是否正确?