En una entrevista me preguntaron cómo se puede lograr un polimorfismo dinámico sin extender una clase. ¿Cómo puede hacerse esto?cómo lograr el polimorfismo dinámico sin extender una clase
Respuesta
Decorator design pattern que explota encapsulation es lo que estás buscando.
Polimorfismo través de la herencia:
class Cat {
void meow() {
// meow...
}
}
class Lion extends Cat {
}
Polimorfismo través de la encapsulación (Decorator):
interface Cat {
void meow();
}
class Lion implements Cat {
private Cat cat;
void meow() {
this.cat.meow();
}
}
ps. Más sobre decoradores: http://www.yegor256.com/2015/02/26/composable-decorators.html
En su comentario al OP, usted declara que _polimorfismo sin herencia no es posible en Java_, pero aquí da un ejemplo de polimorfismo a través de la encapsulación. ¿Este ejemplo contradice la declaración anterior? – jaco0646
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. Vea el Proxy
javadoc para más detalles.
Y sí, estos son (o pueden ser) ejemplos del patrón de decorador, aunque la clave aquí es las técnicas de implementación en lugar del patrón de diseño.
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 pidieran específicamente polimorfismo sin extender una clase, entonces diría :
Sí, puede hacer que el polimorfismo dinámico mediante la implementación de una interfaz en lugar de extender una clase
entonces si le piden más opciones, entonces sería aceptable para abrir servidores proxy, los patrones o algo más.
Espero que ayude!
Un buen entrevistador intentará averiguar 1) cuánto sabe, y 2) si sabe cómo elegir una solución adecuada, y 3) si puede comunicarse bien. Así que sí, la forma correcta de responder a esto sería ofrecer la solución simple, y * insinuar * que hay otras soluciones y patrones de diseño relacionados. Una respuesta "larga y contundente" en la que se requiere/espera una respuesta breve muestra deficiencias en las habilidades de comunicación (OMI). –
Pero debo agregar que leí esta pregunta como para pedir información técnica, no para consejos sobre qué decir en el contexto de una entrevista. –
'Una respuesta' larga y completa 'en la que se requiere/espera una respuesta corta muestra poca capacidad de comunicación (IMO).'; o una falta de conocimiento, ¿sí? Y esa diferencia es importante (IMO). Puede ser que a la empresa le cueste más dinero aumentar las habilidades de comunicación de alguien que enseñarle un patrón de diseño de Java. –
- 1. ¿Cómo lograr el enmascaramiento dinámico de UIView?
- 2. Anular una función sin extender la clase
- 3. CRTP para evitar el polimorfismo dinámico
- 4. Cómo extender DOM elemento como una clase (sin jQuery)
- 5. ¿Es posible extender una clase sin constructores en Java?
- 6. MapView sin extender MapActivity
- 7. cómo extender Python init clase
- 8. Cómo extender la clase css
- 9. ¿Puede una clase extender una clase e implementar una interfaz?
- 10. ¿Cómo sobrescribir/extender una clase interna desde una subclase?
- 11. ¿Puedes extender dos clases en una clase?
- 12. ¿Puede una clase extender dos clases?
- 13. extender la clase DOP
- 14. al extender una clase usando ExtJS
- 15. Clase dinámica extender
- 16. ¿Cómo puedo extender la clase de imagen?
- 17. ¿Cómo extender la clase Object en Rails?
- 18. ¿Puede una clase Scala extender múltiples clases?
- 19. ¿Cómo lograr el diseño de la mesa sin usar tablas?
- 20. Clase org.springframework.web.jsf.el.SpringBeanFacesELResolver debe extender el tipo javax.el.ELResolver
- 21. Polimorfismo: ¿Deriva de un miembro protegido en una clase base?
- 22. ¿Cómo puede una clase anónima usar "extender" o "implementar"?
- 23. ¿Cómo extender una opción complexType sin secuenciar la elección?
- 24. Android cómo usar el adaptador para listView sin extender listActivity
- 25. Extender la clase Singleton abstracta
- 26. ¿Cómo rellenar un div sin extender el borde?
- 27. ¿Cómo manejar el polimorfismo con JSF2?
- 28. Polimorfismo Hibernate
- 29. cómo C++ implementa el polimorfismo internamente?
- 30. ¿Extender la clase Enumerable en C#?
polimorfismo sin extender una clase o polimorfismo sin herencia? – Santosh
polimorfismo sin herencia no es posible en Java – yegor256
@ yegor256 eso es lo que hacen las interfaces –