"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Devriez-vous toujours utiliser `super()` dans les constructeurs ?

Devriez-vous toujours utiliser `super()` dans les constructeurs ?

Publié le 2024-11-25
Parcourir:394

Should You Always Use `super()` in Constructors?

La présence de super() dans les constructeurs est-elle facultative ?

Dans la programmation orientée objet, il est courant d'utiliser des constructeurs dans des classes dérivées pour invoquer des constructeurs dans leurs superclasses. Cependant, certains développeurs remettent en question la nécessité de spécifier explicitement super() dans les constructeurs.

Invocation automatique de super() par le compilateur

Le compilateur Java insère automatiquement un appel au constructeur sans argument accessible de la superclasse si le constructeur de sous-classe ne spécifie pas de constructeur de superclasse. Cela signifie que dans la plupart des cas, l'omission de super() n'affecte pas le comportement du programme.

Exceptions à la règle

Cependant, il existe des situations où l'invocation explicite de super() est requise :

  • Si la superclasse n'a pas de constructeur sans argument accessible.
  • Si le constructeur de sous-classe a des arguments et la superclasse a un constructeur qui accepte les arguments.
  • Si le constructeur de la sous-classe doit invoquer un constructeur spécifique dans la superclasse autre que le constructeur par défaut sans argument.

Utilisation du constructeur en présence d'arguments

Lorsqu'un constructeur de sous-classe a des arguments, il est de la responsabilité du constructeur de sous-classe de transmettre les arguments appropriés à le constructeur de superclasse. Le compilateur n'invoquera pas automatiquement un constructeur de superclasse avec des arguments, sauf indication contraire explicite.

Exemple

Considérez le code suivant :

public class Base {
    private Base() {}
}

public class Derived extends Base {
    public Derived(int i) {
        super(); // Call the default no-args constructor of Base
    }
}

Dans cet exemple, l'appel super() dans le constructeur Derived est essentiel car Base possède un constructeur privé sans argument.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3