Conozco las ventajas de la herencia en Java, pero es algo difícil para mí aceptar que también tiene desventajas. ¿Alguien puede darme un mal ejemplo de herencia en Java?¿Cuál puede ser el mal ejemplo de herencia en Java?
Respuesta
Stack extends Vector
. Una pila no es un vector.Properties extends Hashtable
. Una tabla de propiedades no es una tabla hash.
Consulte this answer para una cotización de Effective Java.
era fácil escribir la aplicación Stack
mediante el uso de lo que ya se implementa en Vector
(lo mismo para Properties
), pero creó problemas - see here
Un ejemplo es el antiguo patrón de implementación de constant interfaces (una interfaz que solo contiene campos inmutables), entonces las clases que deseen utilizar estas constantes implementarían esta interfaz por comodidad. El problema es que su clase ahora hereda la API de esta interfaz y las extensiones de su diseño pueden dañar su API en el futuro.
El uso de interfaces constantes de esta manera generalmente se considera un antipatrón en estos días. Desde Java 5, puede usar enums en lugar de interfaces con constantes y static imports en lugar de definir interfaces constantes.
De Effective Java by Josh Bloch:
El patrón de interfaz constante es un mal uso de las interfaces. Que una clase use algunas constantes internamente es un detalle de implementación. La implementación de una interfaz constante hace que este detalle de implementación se filtre en la API exportada de la clase.
Guau, estoy tan contento de no haberlo encontrado en mis diversos proyectos de software de brownfield ... – David
Creo que siempre que siga la directriz "is-a" y la persona que lo implementa lo entienda y no lo ensucie, no hay realmente ninguna desventaja.
hay un muy buen artículo here hablar sobre el uso de la herencia vs. composición en Java, incluidos ejemplos de cuándo y por qué usar uno sobre el otro. También hay una entrevista here que discutió el tema (haciendo referencia al edicto Gang of Four para "favorecer la composición sobre la herencia").
Es un tema muy amplio y, al menos para mí, muy realmente interesante. Muchos programadores principiantes obtienen algo de herencia y comienzan una mala ruta de diseño, no siempre aprendiendo cómo funciona el polimorfismo y qué patrones de diseño y técnicas pueden aprovechar para escribir un mejor software. Si eres un programador orientado a objetos, nunca se puede aprender mucho sobre el polimorfismo, las interfaces, herencia, composición, abstracciones, etc.
inmadurez es la incapacidad de usar de una inteligencia sin la guía de otro . Emmanuel Kant
Si usted dice: "Es difícil de aceptar, que tiene desventajas.", entonces lo entiendo como - Conoces las desventajas y tienes algunos conflictos morales o confusión de ideas, que cuestionan tu naturaleza de conocimiento. Igual que" escuchar "y" escuchar "son dos cosas diferentes, no puedo hacer a entender, si no intenta usted mismo
Si se quiere entender, trata de leer un libro, por ejemplo:.
- Effective Java (punto 16): composición favor sobre la herencia (Link)
- 1. ¿Es la herencia múltiple mal?
- 2. ¿Puede una int ser nula en Java?
- 3. Pobre ejemplo de herencia en C#
- 4. Ejemplo simple de herencia C++, ¿qué ocurre?
- 5. ¿Puede "esto" ser nulo en Java?
- 6. tipo Java no puede ser resuelto
- 7. Herencia de Java - constructores
- 8. herencia genérica en Java
- 9. ¿Por qué esta imagen se ve tan mal después de ser reducida en Java?
- 10. Herencia en Core Java
- 11. Java extiende el ejemplo
- 12. ¿Coordenadas todo mal en iPhone 3G? Podría ser su compilador
- 13. Herencia múltiple en java
- 14. Herencia en Java
- 15. ¿Un ejemplo de GC forzado ha ido mal?
- 16. Herencia y conversión en Java
- 17. Buen ejemplo de la herencia basada en prototipos de JavaScript
- 18. ¿Cuál es el buen ejemplo de usar 'func_get_arg' en PHP?
- 19. ¿Herencia de enumeración en Java?
- 20. ¿Herencia de campos finales en Java?
- 21. ¿La función aleatoria de Java puede ser cero?
- 22. Herencia de Prototypal. ¿Qué pasa con este simple ejemplo?
- 23. Java Time Zone está en mal estado
- 24. Mal tiempo con System.currentTimeMillis() (Java)
- 25. SSHD Ejemplo de Java
- 26. ¿Cuál puede ser la firma de este método?
- 27. Java herencia enumeración
- 28. Herencia en las interfaces de colección Java
- 29. Herencia de Java
- 30. desventajas de la herencia en Java
Gracias a todos :) – Supereme