Почему в Java нет списков инициализаторов, как в C ++?

В 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 в этом нет необходимости, потому что у объектов нет подобъектов, только указатели на другие объекты.

Вот мои вопросы:

  1. Что они означают, говоря «потому что у объектов нет подобъектов?» Я не понимаю, что такое подобъект (пробовал поискать); означают ли они создание подкласса, который расширяет суперкласс?

  2. Что касается того, почему в Java нет списков инициализаторов, таких как C ++, я бы предположил, что причина в том, что все поля уже инициализированы по умолчанию в Java, а также потому, что Java использует ключевое слово super для вызова конструктора супер (или базового в жаргоне C ++) -класса. Это правильно?

54
задан jruizaranguren 26 October 2015 в 21:26
поделиться