Maison > Java > javaDidacticiel > Pourquoi l'ordre d'invocation du constructeur est-il important en Java : `this()` et `super()` ?

Pourquoi l'ordre d'invocation du constructeur est-il important en Java : `this()` et `super()` ?

DDD
Libérer: 2024-12-30 03:16:10
original
393 Les gens l'ont consulté

Why Does Constructor Invocation Order Matter in Java: `this()` and `super()`?

Ordre d'invocation du constructeur : pourquoi this() et super() sont-ils importants ?

Java impose d'appeler this() et super( ) dans un constructeur soient les instructions initiales. Cette exigence découle de l'exécution séquentielle des constructeurs : le constructeur de la classe parent doit être invoqué avant celui de la sous-classe.

En assurant cet ordre, Java garantit que la classe parent est correctement initialisée avant d'accéder à l'un de ses membres. dans le constructeur de la sous-classe. Prenons l'exemple suivant :

public class MyClass {
    public MyClass(int x) {}
}

public class MySubClass extends MyClass {
    public MySubClass(int a, int b) {
        int c = a + b;
        super(c);  // COMPILE ERROR
    }
}
Copier après la connexion

Le compilateur rejette ce code avec une erreur, car l'appel à super n'est pas la première instruction du constructeur de MySubClass. Réorganiser le code pour garantir que cet ordre résout le problème :

public class MySubClass extends MyClass {
    public MySubClass(int a, int b) {
        super(a + b);  // OK
    }
}
Copier après la connexion

Cet ordre est crucial car tenter d'accéder aux méthodes ou aux champs de la classe parent avant d'initialiser la classe parent via super() peut conduire à un comportement indéfini.

De même, invoquer this() doit être la première instruction d'un constructeur pour garantir que l'objet actuel est entièrement initialisé avant d'appeler un autre constructeur de la même classe. En imposant ces restrictions, Java maintient le bon ordre d'exécution des constructeurs et évite les erreurs potentielles.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal