Por que o Java não possui listas de inicializadores como em C +

No C ++, você pode usar uma lista de inicializadores para inicializar os campos da classe antes que o construtor comece a executar. Por exemplo

Foo::Foo(string s, double d, int n) : name(s), weight(d), age(n) {
    // Empty; already handled!
}

Estou curioso para saber por que o Java não possui um recurso semelhante. De acordo com Core Java: Volume 1:

C ++ usa esta sintaxe especial para chamar construtores de campo. Em Java, não há necessidade disso, porque os objetos não têm subobjetos, apenas ponteiros para outros objeto

Aqui estão minhas perguntas:

O que eles querem dizer com "porque os objetos não têm subobjetos?" Não entendo o que é um subobjeto (tentei procurar); eles significam uma instanciação de uma subclasse que estende uma superclasse?

Por que o Java não possui listas de inicializadores como C ++, eu suponho que o motivo é porque todos os campos já foram inicializados por padrão em Java e também porque o Java usa osuper para chamar o construtor da classe super (ou base no jargão C ++). Isso está correto?

questionAnswers(2)

yourAnswerToTheQuestion