Heredar múltiples clases abstractas en Java
Tengo dos clases abstractas
llamadas FlyingBird
y RunningBird
public abstract FlyingBird extends Bird implements IFlyingBird {}
public abstract RunningBird extends Bird implements IRunningBird {}
Ahora quiero tener otra clase abstracta que sea tanto IRunningBird
como IFlyingBird
public abstract FlyingRunningBird extends Bird implements IFlyingBird, IRunningBird {}
En esta clase estoy duplicando todo el código de FlyingBird
y RunningBird
La agregación de clases dependientes no es posible ya que ambas clases son abstractas
El problema es que si se realiza una corrección de errores o modificación en FlyingBird
o RunningBird
, no se reflejará en FlyingRunningBird
. Necesito actualizar también FlyingRunningBird
.
¿Hay alguna forma de evitar esta duplicación de código en FlyingRunningBird
? o
¿Usar FlyingBird
y RunningBird
en FlyingRunningBird
para evitar la duplicación de código?
davy.ai
Sí, podemos evitar la duplicación de código en
FlyingRunningBird
utilizando composición en lugar de herencia. Podemos crear variables de instancia de las clasesFlyingBird
yRunningBird
enFlyingRunningBird
y delegar la implementación de sus métodos a estas variables de instancia. De esta manera, cualquier modificación o corrección de errores realizada enFlyingBird
oRunningBird
se reflejará automáticamente enFlyingRunningBird
.Código de ejemplo:
Con esta implementación, hemos evitado la duplicación de código y nos hemos asegurado de que cualquier cambio realizado en
FlyingBird
oRunningBird
se refleje automáticamente enFlyingRunningBird
.