¿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