java - simple - cómo lograr un polimorfismo dinámico sin extender una clase
jarroba (3)
De acuerdo con mi experiencia, en la mayoría de las entrevistas de trabajo las preguntas no buscan respuestas demasiado elaboradas, y la mayoría de las veces son solo preguntas difíciles, por lo que si preguntaran específicamente por polimorfismo sin extender una clase, entonces diría:
Sí, puede tener un polimorfismo dinámico al implementar una interfaz en lugar de extender una clase
entonces, si pidieran más opciones, estaría bien mostrar proxies, patrones u otra cosa.
¡Espero eso ayude!
En una entrevista me preguntaron cómo puedes lograr un polimorfismo dinámico sin extender una clase. ¿Cómo puede hacerse esto?
La solución simple es escribir una clase que implemente una interfaz en lugar de extender una clase base.
Otra solución es crear un proxy dinámico ... que es esencialmente una forma inteligente de implementar una interfaz sin escribir explícitamente la clase. Ver el Proxy
javadoc para más detalles.
Y sí, estos son (o pueden ser) ejemplos del patrón decorador, aunque la clave aquí es las técnicas de implementación en lugar del patrón de diseño.
El patrón de diseño del decorador que explota la encapsulation es lo que está buscando.
Polimorfismo a través de la herencia
class Cat {
void meow() {
// meow...
}
}
class Lion extends Cat {
}
Polimorfismo por encapsulación (patrón decorador):
interface Cat {
void meow();
}
class Lion implements Cat {
private Cat cat;
void meow() {
this.cat.meow();
}
}
PD. Más sobre decoradores: http://www.yegor256.com/2015/02/26/composable-decorators.html