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 } }
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); } }
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();
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!