Como dito acima interface proposta a assinatura de um contrato com as classes, onde somete conterá seus métodos sem implementação.
public interface Autenticavel {
boolean autentica(int senha);
}
Vantagens, imagine uma classe Diretor e uma gerente que tem uma função de autenticar:
package br.com.aulas.interfaces.autentica;
public class Diretor extends Funcionario implements Autenticavel {
private int senha = 4321;
@Override
public boolean autentica(int senha) {
if (this.senha != senha) {
return false;
}
return true;
}
}
class Gerente extends Funcionario implements Autenticavel {
private int senha = 123;
@Override
public boolean autentica(int senha) {
if (this.senha != senha) {
return false;
}
return true;
}
}
Na hora de determinar qual método autenticar o sistema vai usar é somente usar a interface:
public class ValidaTeste {
public static void main(String[] args) {
Autenticavel diretor = new Diretor();
Autenticavel gerente = new Gerente();
SistemaInterno valida = new SistemaInterno();
valida.login(diretor, 12);
valida.login(gerente,123);
}
class SistemaInterno {
void login(Autenticavel autenticar, int senha){
boolean valida = autenticar.autentica(senha);
if (valida == true) {
System.out.println("Logado com sucesso! ");
} else {
System.err.println("Senha invalida");
}
}