В С++ вы можете использовать список инициализаторов для инициализации полей класса до запуска конструктора. Например:
Foo::Foo(string s, double d, int n) : name(s), weight(d), age(n) {
// Empty; already handled!
}
Мне любопытно, почему Java не имеет подобной функции. Согласно Core Java: Том 1:
С++ использует этот специальный синтаксис для вызова конструкторов полей. В Java нет необходимости в нем, поскольку объекты не имеют подобъектов, только указатели на другие объекты.
Вот мои вопросы:
-
Что они понимают под "потому что объекты не имеют подобъектов?" Я не понимаю, что такое подобъект (я попытался найти его); они означают создание подкласса, который расширяет суперкласс?
-
Что касается того, почему в Java нет списков инициализаторов, таких как С++, я бы предположил, что причина в том, что все поля уже инициализируются по умолчанию в Java, а также потому, что Java использует ключевое слово
super
для вызова супер ( или база в С++ lingo) -класс. Правильно ли это?