В 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 ++) -класса. Это правильно?