Pourquoi ne pas Java ont initialiseur de listes comme en C++?

En C++, vous pouvez utiliser une liste d'initialiseur pour initialiser les champs de la classe avant que le constructeur ne commence à courir. Par exemple:

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

Je suis curieux de savoir pourquoi Java ne dispose pas d'une fonctionnalité similaire. Selon de Base Java: Volume 1:

C++ utilise cette syntaxe spéciale pour appeler le champ des constructeurs. En Java, il n'est pas nécessaire, parce que les objets ont pas de sous-objets, seulement des pointeurs vers d'autres objets.

Voici mes questions:

  1. Que veulent-ils dire par "parce que les objets ont pas de sous-objets?" Je ne comprends pas ce qu'est un sous-objet est (j'ai essayé de regarder vers le haut); signifient-ils une instanciation d'une sous-classe qui étend la classe mère?

  2. Comme pour pourquoi Java n'a pas d'initialiseur de listes comme C++, je suppose que la raison en est que tous les champs sont déjà initialisés par défaut en Java, et aussi parce que Java utilise le super mot-clé pour appeler le super(ou la base en C++ lingo) le constructeur de la classe. Est-ce correct?

InformationsquelleAutor Jesse Good | 2011-08-22