Maison > Java > javaDidacticiel > Pourquoi Java n'hérite-t-il pas des constructeurs ?

Pourquoi Java n'hérite-t-il pas des constructeurs ?

Mary-Kate Olsen
Libérer: 2024-12-05 03:26:10
original
929 Les gens l'ont consulté

Why Doesn't Java Inherit Constructors?

Héritage des constructeurs Java : percer le mystère

En Java, les constructeurs d'une classe ne sont pas hérités par ses sous-classes. Ce choix de conception a suscité une question de longue date : pourquoi Java adopte-t-il cette approche ?

Considérez la classe suivante :

public class Super {

  public Super(ServiceA serviceA, ServiceB serviceB, ServiceC serviceC){
    this.serviceA = serviceA;
    //etc
  } 

}
Copier après la connexion

Lorsqu'une sous-classe, Son, hérite de Super, Java exige qu'un constructeur soit explicitement déclaré dans Son avec des paramètres identiques à ceux de Super. Cela peut conduire à du code répétitif, comme démontré ci-dessous :

public class Son extends Super{

  public Son(ServiceA serviceA, ServiceB serviceB, ServiceC serviceC){
    super(serviceA,serviceB,serviceC);
  }

}
Copier après la connexion

Cette répétition soulève la question : pourquoi Java interdit-il l'héritage des constructeurs ?

La réponse réside dans les conséquences potentielles d'un tel héritage. Si les constructeurs étaient hérités, chaque classe hériterait éventuellement d'un constructeur de la classe de base Object. Cela signifierait que chaque classe, quel que soit son objectif, aurait un constructeur sans paramètre.

Une telle conception créerait une ambiguïté. Par exemple, le code suivant :

FileInputStream stream = new FileInputStream();
Copier après la connexion

laisserait en question quels paramètres doivent être transmis au constructeur. Différentes classes peuvent nécessiter différents paramètres, ce qui rend un tel héritage très peu pratique.

Bien qu'il existe des scénarios dans lesquels les constructeurs pass-through (constructeurs qui appellent simplement le constructeur de la superclasse) sont utiles, Java a judicieusement choisi de ne pas en faire le comportement par défaut. . Les différents paramètres requis pour la construction des sous-classes nécessitent la déclaration explicite des constructeurs dans chaque classe.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal