Boa tarde a todos.
Nem tanto assim. Acho que tanto a herança quanto a composição tem suas vantagens e desvantagens cada uma. Dependendo do desenvolvimento de sua aplicação, voce pode utilizar a herança ou a composição, ou até ambas.
Optar somente por composição, para mim então seria melhor retroagir a linguagem de programação estruturada.
Imagine voce ter que reescrever uma classe que monta uma janela da GUI, ou voce ter que reescrever todos os métodos comuns de uma classe do tipo Socket para enviar dados na Web. Ter que reelembrar todos os seus métodos e atributos seria um caos, mesmo o java sendo open source.
Além disso, discordo quando diz que herança quebra o encapsulamento, se assim fosse, para serviria os modificadores “private” e “protected”.
Contudo, se voces repararem, até dentro da composição de objetos entre classes existe a herança. Como assim :?: :?: :?:
Não existe classe sem classe pai, mãe, super classe, classe descendente ou como queiram chamar, isto porque todas as classes do java extende (herda) de Object implicitamente, isto quer dizer que mesmo voce declarando uma classe de modo simples omitindo qualquer herança (extenção), queira ou não queira ela vai herdar de Object.
Assim é também na linguagem Object Pascal do Delphi que tem a classe TObject como classe primária, logo não dá para escapar da herança, até porque ela não tão ruim assim.
Um abraço.