Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Interface vs Herança: usar interface é melhor do que sobrescrever métodos por herança?

Estou tentando estabelecer uma diferença mais palpável para entender quando usar herança e quando interface. Devo usar herança quando perceber que é necessário usar a implementação dos métodos e interface quando quando perceber que a herança iria me fazer sobrescrever o método de qualquer jeito?

1 resposta
solução!

Bom dia Francisco,

Para entender isso, é bom saber o que cada um te dá como vantagens. Pense que em uma estrutura de Herança, você estará não só herdando comportamentos (métodos), mas atributos também. Ok, se você criar uma classe abstrata e só declarar métodos abstratos nela, todas filhas desta terão que implementar tudo, logo vira o mesmo que se fosse uma interface, e por isso mesmo que se for este o caso, acredito que usar as interfaces é mais indicado.

Vamos nos lembrar de conceitos vitais da OO:

Em herança, um Objeto filho É DO TIPO do Objeto pai. Um cachorro É UM animal.

Em composição, um Objeto SE COMPORTA como ALGO. Eu posso ser um Objeto B, do Tipo A (B extends A), e ainda assim me comportar de outras formas C, D e E (implements C, D, E). Eu me comportar de uma determinado forma, semanticamente não quer dizer que eu SOU aquilo, apenas me COMPORTO daquela forma quando necessário.

Em ambos você ganha Polimorfismo, mas muitas vezes o Polimorfismo ganho através da Composição é o que faz mais sentido semântico. É altamente recomendado evitar utilizar Herança, apenas se realmente é um cenário claro e está é a única solução. Heranças são fáceis de fazer virarem monstros, estender demais e deixar ela muito mais complexa do que deveria, programando para interfaces é uma forma mais desacoplada e de fácil manutenção.

Claro, cada caso um caso e requer análise para decidir o mais indicado, mas em linhas gerais, é bom ter isso tudo em mente.

Espero ter ajudado, qualquer dúvida manda ai, abraço.