2011-03-20 15 views

Respuesta

7
  • 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

5

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.

+0

Guau, estoy tan contento de no haberlo encontrado en mis diversos proyectos de software de brownfield ... – David

1

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.

4

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.

1

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)