Je me demandais pourquoi en java les constructeurs ne sont pas hérités ? Vous savez quand vous avez une classe comme celle-ci :
public class Super {
public Super(ServiceA serviceA, ServiceB serviceB, ServiceC serviceC){
this.serviceA = serviceA;
//etc
}
}
Plus tard, lorsque vous héritez de Super
java se plaindra qu'il n'y a pas de constructeur par défaut défini. La solution est évidemment quelque chose comme :
public class Son extends Super{
public Son(ServiceA serviceA, ServiceB serviceB, ServiceC serviceC){
super(serviceA,serviceB,serviceC);
}
}
Ce code est répétitif, non DRY et inutile (IMHO)... ce qui amène à nouveau la question :
Pourquoi Java ne supporte pas l'héritage des constructeurs ? Y a-t-il un avantage à ne pas autoriser cet héritage ?
3 votes
Je suis d'accord que le constructeur dans
Son
est répétitif. C'est pour cette raison que le C++ permet à les classes dérivées doivent hériter des constructeurs de base (voir www2.research.att.com/~bs/C++0xFAQ.html#héritage ). Notez que j'insiste sur "permettre" car la classe dérivée doit déclarer explicitement qu'elle utilise les constructeurs de la base.1 votes
Comme C++, Java bénéficierait également d'une syntaxe permettant l'héritage des constructeurs.
0 votes
Si vous avez un
private final int foo;
dans la superclasseSuper
vous ne pouvez pas assigner une valeur à foo dans le constructeur hérité dansSon
parce qu'elle est privée dansSuper
.