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)