Java applique la règle stricte selon laquelle this() et super() les appels doivent être les premières instructions dans un constructeur. Cette restriction existe pour garantir la bonne initialisation des classes parents avant l'exécution des constructeurs de classes enfants.
Par exemple, le code suivant déclenchera une erreur de compilation car super(c) n'est pas la première instruction dans MySubClass. constructeur :
public class MySubClass extends MyClass { public MySubClass(int a, int b) { int c = a + b; super(c); // COMPILE ERROR } }
Cependant, cela peut être contourné en modifiant le code à :
public class MySubClass extends MyClass { public MySubClass(int a, int b) { super(a + b); // OK } }
Pourquoi l'ordre est important
L'appel super() dans un constructeur de sous-classe initialise les variables d'instance de la classe parent et appelle le constructeur parent. Cela garantit que la classe parent est entièrement initialisée avant que le constructeur de la sous-classe ne procède.
Si super() n'était pas obligatoirement la première instruction, il serait possible d'effectuer des opérations qui reposent sur l'initialisation de la classe parent avant il a en fait été initialisé, ce qui peut conduire à un comportement indéfini.
Exceptions et solutions de contournement
Bien que le Le compilateur nécessite que this() et super() soient invoqués en premier, il ne restreint pas l'exécution de la logique au sein du constructeur. La logique peut être placée dans une seule expression ou transmise aux appels super() ou this().
Par exemple :
public class MySubClass extends MyClass { public MySubClass(int a, int b) { super(Arrays.asList(new Object[] { a, b })); // OK } }
Conclusion
La restriction selon laquelle this() et super() doivent être les premières instructions d'un constructeur sert à garantir une initialisation correcte de l'objet et à éviter les erreurs potentielles causées par un accès prématuré aux membres de la classe parent avant qu'ils ne soient correctement initialisés. Cela impose un ordre prévisible d'exécution du constructeur pour les classes, garantissant l'intégrité et la cohérence des objets.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!