He estado codificando durante aproximadamente 8 años, sin embargo, todavía encuentro que la herencia es demasiado flexible y, a veces, te confunde totalmente con el código que has escrito. Un ejemplo más simple sería:
abstract class AClass {
protected void method1() {
if(check()) {
do1();
} else {
do2();
}
}
protected abstract void do1();
protected abstract void do2();
}
La intención de la clase es que las personas puedan implementar do1 () y do2 () para que se pueda hacer alguna lógica adicional, sin embargo, a veces las personas deciden sobrecargar el método1 (), y luego las cosas se complican de inmediato.
Solo encuentro en el patrón de estrategia, el código se reutiliza bien a través de la herencia, en la mayoría de los casos, el diseñador de la clase base conoce muy bien sus subclases, y esa herencia es totalmente opcional.
Tengo una clase que es heredada por 4 clases: un IoHandler, y son subclases para el lado del servidor, el lado del cliente, el servidor perimetral, el servidor de origen, y comienza a volverme loco. Siempre estuve en la refactorización de códigos, siempre salí con ideas que creo que funcionarían y luego se demostró que no. Se dice que el cerebro humano solo puede contener 7 piezas de información una vez, ¿llevo demasiadas?
final
[si estás usando Java]. Esto efectivamente lo hace no virtual y no se puede sobrecargar. Perfecto para usar en esta circunstancia [patrón de plantilla]