Maison  >  Article  >  Java  >  Quand `super()` est-il vraiment nécessaire dans un constructeur ?

Quand `super()` est-il vraiment nécessaire dans un constructeur ?

DDD
DDDoriginal
2024-10-31 03:43:30147parcourir

 When is `super()` Really Necessary in a Constructor?

Super() dans le constructeur : une question de nécessité

Dans le domaine de la programmation orientée objet, les constructeurs jouent un rôle crucial dans l'initialisation objets nouvellement créés. Cependant, la question se pose : est-il indispensable d'appeler explicitement la méthode super() au sein du constructeur d'une sous-classe ?

Invocation automatique

En l'absence d'un super( explicite) ), le compilateur appelle automatiquement le constructeur sans argument accessible dans la superclasse. Ce constructeur n'a aucun paramètre et est essentiel pour initialiser correctement les membres de l'instance de la superclasse.

Constructeurs avec arguments

Lorsque le constructeur d'une sous-classe inclut des arguments, il délègue généralement des tâches d'initialisation à un constructeur dans la superclasse avec une liste d'arguments correspondante. Si aucun constructeur correspondant n'est trouvé, une erreur se produit. En d'autres termes, le constructeur invoqué via super() doit avoir des arguments qui correspondent exactement aux arguments passés au constructeur de la sous-classe.

Importance de l'accessibilité

Le non-accessible Le constructeur args de la superclasse doit être visible par la sous-classe. Si le constructeur de la superclasse est privé ou protégé, un appel explicite à super() avec les arguments appropriés est nécessaire pour invoquer le bon constructeur.

Exemples

Pour illustrer ces concepts , considérez les extraits de code suivants :

<code class="java">public class Base { // No-args constructor } public class Derived extends Base { // Default constructor will be invoked by the compiler }</code>

Dans ce cas, le constructeur par défaut dans Base sera automatiquement invoqué lorsqu'une instance de Derived est créée.

<code class="java">public class Base { public Base(int i) { } } public class Derived extends Base { public Derived(int i) { super(i); } }</code>

Ici, le constructeur dans Derived appelle explicitement le constructeur correspondant dans Base avec l'argument i.

<code class="java">public class Base { private Base() { } } public class Derived extends Base { } // Error: no accessible no-args constructor in superclass</code>

Ce code entraîne une erreur car le constructeur de Base est privé et n'est pas accessible à la sous-classe.

En conclusion, alors que le compilateur invoque automatiquement le constructeur sans argument accessible dans la superclasse, les appels explicites à super() sont essentiels lorsque le constructeur d'une sous-classe a des arguments ou lorsque le constructeur de la superclasse n'est pas accessible. Comprendre ces nuances est crucial pour garantir une initialisation correcte des objets en Java.

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