Maison  >  Article  >  Java  >  Devriez-vous toujours utiliser `super()` dans les constructeurs ?

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

Barbara Streisand
Barbara Streisandoriginal
2024-11-02 12:30:30585parcourir

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 les 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 la sous-classe a des arguments et que la superclasse a un constructeur qui accepte les arguments.
  • Si le constructeur de 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 de 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 au 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 :

<code class="java">public class Base {
    private Base() {}
}

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

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

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!

Déclaration:
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