quando vou implementar os métodos da interface "Autenticavel" diretamente nas classes "Cliente", "Administrador" e "Gerente", eles compilam normal, mas ao quando delego esses métodos à classe "AutenticacaoUtil" aparece esse erro:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "moneyBank_herdado.autenticacaoUtil.setSenha(int)" because "this.autenticador" is null at moneyBank_herdado/moneyBank_herdado.Cliente.setSenha(Cliente.java:33) at moneyBank_herdado/moneyBank_herdado.testeDoSistema.main(testeDoSistema.java:10)
package moneyBank_herdado;
public class Cliente implements Autenticavel {
private String nome;
private String cpf;
private autenticacaoUtil autenticador;
// CONSTRUTOR DO NOME E CPF
public Cliente(String nome, String cpf) {
this.nome = nome;
this.cpf = cpf;
System.out.println("novo cliente. nome: " + nome + ", cpf: " + cpf);
}
// CONSTRUTOR PARA A REUTILIZAÇÃO DE CODIGO DE AUTENTICAÇÃO
public Cliente() {
this.autenticador = new autenticacaoUtil();
}
// IMPLEMENTAÇÃO DO AUTENTICAVEL UTILIZANDO A CLASSE autenticacaoUtil
@Override
public boolean autentica(int senha) {
return this.autenticador.autentica(senha);
}
@Override
public void setSenha(int senha) {
this.autenticador.setSenha(senha);
}
}
package moneyBank_herdado;
public class autenticacaoUtil {
private int senha;
// IMPLEMENTAÇÃO DO AUTENTICAVEL
public boolean autentica(int senha) {
if (this.senha == senha) {
return true;
}else {
return false;
}
}
public void setSenha(int senha) {
this.senha = senha;
}
}
package moneyBank_herdado;
public class sistemaInterno {
private int senha = 2222;
public void autentica(Autenticavel f) {
boolean autenticou = f.autentica(this.senha);
if(autenticou) {
System.out.println("acesso permitido");
}else{
System.out.println("acesso negado");
}
}
}