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 Core 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:
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?
Quant à savoir 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 l'
super
mot-clé pour appeler le super(ou la base en C++ lingo) le constructeur de la classe. Est-ce correct?