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

Quais classes serão interface e quais serão classes mães?

No vídeo "completando o sistema" da aula 6 do curso "Java Polimorfismo", foram usadas uma classe abstrata (Funcionário) e uma interface (Autenticável). A lógica ficou bastante clara, mas me surgiu uma dúvida:

Porque não colocar o contrário? Ou seja, tratar a classe abstrata "funcionário" como uma interface e a interface "autenticável" como classe abstrata. Existe algum procedimento padrão ou mais usado ou alguma boa prática que dita como será feita essa hierarquização? Caso sim, como proceder? Se não, vai do design do projeto específico?

1 resposta
solução!

Oie Marcos, tudo bem com você?

Na minha concepção e acredito que na maioria dos programadores usamos a interface quando precisamos que classes de diferentes origens (herança) tenham métodos em comum. Isso acontece também pelo fato do Java não aceitar herança múltipla.

A classe abstrata é utilizada quando você quer que uma classe que herde dela implemente alguns métodos, mas que também possam ter métodos implementados na própria classe abstrata.

No caso do video foi feito daquela forma, pois haviam diversos métodos que iriam se repetir em outras classes, por isso foi criado uma classe mãe abstrata "Funcionario" onde todas as classes em que fosse necessário todos os métodos dela, iriam se tornar uma classe filha, podendo herdar seus métodos e atributos tirando assim a necessidade de se repetir o mesmo código. Entretanto surgiu a necessidade de colocar métodos relacionados a autenticação, porém eles só seriam necessários em duas classes filhas, a "administrador" e "gerente", e por isso caso fossem implementados na classe mãe todas as outras classes também teriam acesso. Então para resolver isso, foi criado a interface já que no java, não existe a possibilidade de herança múltipla.

Portanto, respondendo sua pergunta principal, nesse caso não seria ideal inverter as duas classes, transformando a "funcionario" em interface e "autenticavel" em classe abstrata, pois como já mencionado, a interface não implementa métodos e então as classes que implementassem essa interface ainda teriam o problema de código repetido o que não ocorreria se elas herdassem de uma classe abstrata que já teria esses métodos implementados.

Espero que minha explicação tenha ficado clara, qualquer dúvida ou problema fico a disposição :)

Bons estudos!