Herencia vs Composición [duplicado]

Posible duplicado:
¿Prefieres la composición sobre la herencia?

Me pregunto por qué (o en qué casos) debería uno considerar la herencia en lugar de la composición cuando hay tantas desventajas:

Si implementamos / anulamos un método en una subclase que llama al método de la superclase, no hay garantía de que otra versión de nuestra superclase (quizás alguna biblioteca) no rompa nuestro código.si aparecerá un nuevo método en la superclase con la misma firma que el método de subclase, pero con un tipo de retorno diferente, nuestra clase no compilará.

Por lo tanto, no puedo imaginar cómo podemos confiar en la Tierra. El autor de la superclase puede querer mejorar el rendimiento y nuestro código de cliente puede fallar.

Así que mis preguntas son:

¿Cómo se resuelven estos problemas (por ejemplo, en las bibliotecas estándar de Java)?¿Cuándo usar la herencia y la composición?

Respuestas a la pregunta(1)

Su respuesta a la pregunta