Maison > Java > javaDidacticiel > le corps du texte

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

DDD
Libérer: 2024-10-31 03:43:30
original
164 Les gens l'ont consulté

 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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!