Lors de la lecture de diverses questions Stack Overflow et du code d'autres personnes, le consensus général sur la manière de concevoir des classes est fermé. Cela signifie que, par défaut, en Java et en C #, tout est privé, les champs sont finaux, certaines méthodes sont finales et parfois les classes sont même finales .
L'idée derrière ceci est de cacher les détails de l'implémentation, ce qui est une très bonne raison. Cependant, avec la protected
plupart des langages POO et du polymorphisme, cela ne fonctionne pas.
Chaque fois que je souhaite ajouter ou modifier des fonctionnalités à une classe, des obstacles privés et définitifs sont placés partout. Ici, les détails de l'implémentation importent: vous prenez l'implémentation et l'étendez, sachant parfaitement quelles en sont les conséquences. Cependant, étant donné que je ne peux pas accéder aux champs et méthodes privés et finaux, j'ai trois options:
- Ne prolongez pas la classe, contournez simplement le problème conduisant à un code plus complexe
- Copier et coller toute la classe, éliminant ainsi la réutilisation du code
- Fork le projet
Ce ne sont pas de bonnes options. Pourquoi n'est-il pas protected
utilisé dans les projets écrits dans les langues qui le supportent? Pourquoi certains projets interdisent-ils explicitement l'héritage de leurs classes?