¿Por qué Java no tiene listas de inicializadores como en C ++?

En C ++, puede usar una lista de inicializadores para inicializar los campos de la clase antes de que el constructor comience a ejecutarse. Por ejemplo

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

Tengo curiosidad de por qué Java no tiene una característica similar. De acuerdo a Core Java: Volumen 1:

C ++ usa esta sintaxis especial para llamar a los constructores de campos. En Java, no es necesario porque los objetos no tienen subobjetos, solo apuntadores a otros objetos.

Aquí están mis preguntas:

¿Qué quieren decir con "porque los objetos no tienen subobjetos?" No entiendo qué es un subobjeto (intenté buscarlo); ¿significan una instanciación de una subclase que extiende una superclase?

En cuanto a por qué Java no tiene listas de inicializadores como C ++, supongo que la razón es porque todos los campos ya están inicializados de forma predeterminada en Java y también porque Java usa lasuper palabra clave para llamar al constructor de clase super (o base en jerga C ++). ¿Es esto correcto

Respuestas a la pregunta(2)

Su respuesta a la pregunta