C++ では、コンストラクターの実行を開始する前に、初期化子リストを使用してクラスのフィールドを初期化できます。例えば:
Foo::Foo(string s, double d, int n) : name(s), weight(d), age(n) {
// Empty; already handled!
}
Java に同様の機能がない理由が気になります。Core Java: Volume 1によると:
C++ は、この特殊な構文を使用してフィールド コンストラクターを呼び出します。Java では、オブジェクトにはサブオブジェクトがなく、他のオブジェクトへのポインタしかないため、その必要はありません。
ここに私の質問があります:
「オブジェクトにはサブオブジェクトがないため」とはどういう意味ですか? サブオブジェクトが何かわかりません (調べてみました)。スーパークラスを拡張するサブクラスのインスタンス化を意味しますか?
Java に C++ のようなイニシャライザ リストがない理由については、Java ではすべてのフィールドがデフォルトですでに初期化されているため、また Java が
super
キーワードを使用してスーパー (または C++ 用語ではベース) クラス コンストラクタを呼び出すためであると考えられます。 . これは正しいです?