Olá. Seguindo o exemplo da aula, acabou surgindo uma dúvida sobre Interfaces, mais especificamente sobre a "leitura" do código. Por exemplo, quando eu estou na classe TesteSistema, eu crio um objeto Gerente e ponho ele para autenticar...
public class TesteSistema {
public static void main(String[] args) {
Gerente g = new Gerente();
g.setSenha(2222);
SistemaInterno si = new SistemaInterno();
si.autentica(g);
}
}
Eu quero entender o funcionamento do "autentica" (SistemaInterno), portando uso o inspecionar nele. Imediatamente eu sou redirecionado para a classe SistemaInterno. Até aí tudo bem, mas é agora que vem o pulo do gato!
public class SistemaInterno {
private int senha = 2222;
public void autentica(Autenticavel a) {
boolean autenticou = a.autentica(this.senha);
if (autenticou) {
System.out.println("Pode entrar no sistema");
} else {
System.out.println("Não pode entrar no sistema");
}
}
}
Agora eu quero entender o funcionamento do "autentica" que está relacionado ao objeto passado como parâmetro ( a.autentica(this.senha) ), porém ao invés de ser levado para uma implementação, eu acabo caindo na interface.
public abstract interface Autenticavel {
public abstract void setSenha(int senha);
public abstract boolean autentica(int senha);
}
Ou seja, eu continuo sem saber o que está acontecendo. Como eu faço para saber qual o método que está sendo chamado a partir do "autentica" do SistemaInterno? Eu preciso sempre voltar para TesteSistema e abrir o objeto específico (para saber o que está sendo chamado), para daí encontrar o método implementado? Ou existe uma forma mais fácil de fazer isso?