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

Dúvidas sobre interface e classe abstract

1) Fiquei na dúvida quando usar interface ou classe abstrata diretamente. Porque me parece que todas as classes abstratas que criamos poderiam ter sido interfaces. Porém pensei o seguinte: Se eu tiver uma classe que tem métodos com implementações e ao mesmo tempo tenho métodos que não quero implementar (e sim deixar as classes filhas implementarem) eu uso classe abstrata (exemplo: abstract class Pessoa) pois ai ela consegue ter os dois. E quando eu tiver uma suposta classe que na verdade eu veja que não será implementado nenhum dos seus métodos ai eu uso interface (exemplo: interface Autenticavel)?

Mesmo pensando isso cai naquele dilema de novo, para que usar classe abstrata então se todos os métodos que são abstratos eu poderia colocar em uma interface?

2) O professor disse que existe um conceito na programação sobre usar sempre abstrações, nesse caso eu poderia usar sempre interface e não seria necessário mais herança? Herança é errado usar pois ela tem uma implementação já para o método?

3) Na classe Autenticador passamos como parâmetro a interface Autenticavel:

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeA minha dúvida é que, como não estamos trabalhando com herança nesse caso, então Autenticavel não é uma classe mãe. Então eu não poderia dizer por exemplo que "Gerente é um Autenticável como digo que Gerente é um Funcionário", certo? Pergunto isso para entender como que na hora de testar, eu passando um Gerente/Diretor/Funcionario ele entende que seria do mesmo tipo da interface Autenticável:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas
solução!
  1. Exato! Uma interface é basicamente uma classe abstrata somente com métodos abstratos, sem nenhuma implementação
  2. A ideia é preferir interfaces sim, mas nunca usar algo é extremo. Use quando fizer sentido. E não, herança não é errado. Conforme você for estudando assuntos mais complexos (como padrões de projeto) vai ver usos mais reais de herança.
  3. Sim, gerente é um Autenticável sim. Para efeitos de comunicação com outros devs nós dizemos que Gerente implementa Autenticavel. Para o código, Gerente é um Autenticavel. O método tentaLogin espera qualquer objeto cuja classe implemente a interface Autenticavel.

Ah entendi. Obrigada!