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?