Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Herança x Interface

Caros,

O seguinte trecho desta aula sobre Interface gerou-me dúvidas:

"O SistemaInterno aceita qualquer tipo de Funcionario, tendo ele acesso ao sistema ou não, mas note que nem todo Funcionario possui o método autentica. Isso nos impede de chamar esse método com uma referência apenas a Funcionario (haveria um erro de compilação). O que fazer então? "

Após a leitura deste trecho, e do resto do material, ainda não entendi a real importância da Interface.

Se eu usar apenas herança, sendo o método autentica abstrato ou não, basta eu não "lançar", para o método em questão, funcionários que não autenticam. E outra, não encontrei erro de compilação nenhum, como citado no trecho acima.

Alguém poderia me dizer: mas o método autentica é abstrato.

Nesse caso, ao meu ver, ou se retira a palavra abstract do método, ou mantemos a palavra e o método, apesar de escrito na classe filha que não autentica, simplesmente não seria invocado.

Será que estou me confundindo?

Aguardo ajuda.

Att, Ricardo Batich

4 respostas

O problema de deixar o autentica no Funcionario é que nem todo funcionário deveria autenticar.. E aí, vai fazer como? Pq uma vez que vc herdou, o método veio junto :). Nesse caso nem importa se é abstrato ou não, alguns tipos de funcionários não deveriam poder autenticar.

A interface te da essa flexibilidade.. vc pode manter a herança do Funcionario e, para alguns tipos específicos, implementar a interface Autentica.

Oi Alberto,

Entendi seu raciocínio e faz sentido para mim. Mas, por curiosidade, porque estaria errado ter o método na classe e simplesmente não usarmos? Seria algo contra orientação a objetos?

solução!

Vc teria objetos com mais responsabilidades do que deveriam, ferindo a coesão. Tirando a teoria e indo mais para a prática... Alguém do time veria o método lá e usaria hehehehe. Pensa sempre assim: vc deixou um método público numa classe, ele será usado.

Entendi Alberto.

Muito obrigado.