Herança vs Composição [duplicata]

Duplicata Possível:
Prefere composição sobre herança?

Eu me pergunto, por que (ou em quais casos) deve-se considerar a herança em vez da composição quando há tantos contras:

se implementarmos / substituirmos um método em uma subclasse que chama o método da superclasse, não há garantia de que outra versão de nossa superclasse (talvez alguma biblioteca) não irá quebrar nosso códigoSe aparecer um novo método na superclasse com a mesma assinatura que o método da subclasse tem, mas com diferentes tipos de retorno, nossa classe não será compilada.

Portanto, não posso imaginar como podemos confiar na Terra. O autor da superclasse pode querer melhorar o desempenho e nosso código de cliente pode falhar.

Então minhas perguntas são:

Como esses problemas são resolvidos (por exemplo, em bibliotecas Java padrão)?Quando usar herança e composição?

questionAnswers(1)

yourAnswerToTheQuestion