¿cuándo usar herencia?

Si el código y la interfaz de una clase nos gustan podemos aprovecharlo (herencia) en otra clase

·         añadiendo más cosas

·         ocultando variables (a base de definir otra que tape a la primera)

·         redefiniendo métodos (polimorfismo)

El gran inconveniente de la herencia es que no se pueden eliminar métodos de la superclase. Es  imposible que el compilador no vea todo lo que hace público la superclase. Si necesita que desaparezca algo, tiene que usar composición + delegación (o sea, meter dentro de la nueva clase B una referencia a la primera clase A, y poner métodos en B para acceder a lo que se necesite de A por delegación). La composición + delegación es extremadamente flexible, siendo su única limitación que no podemos hacer upcasting y, por tanto, no podemos disfrutar de las ventajas del polimorfismo.

La gran ventaja de la herencia es que la nueva clase es como la anterior pero ampliada y mejorada.

Temas relacionados

87. Herencia [inheritance] (concepto)