Na classe TesteGerente, instanciei um objeto Gerente e a referencia do tipo Autenticavel e ocorre o erro de que os metodos não são definido do tipo Autenticavel, porém a classe Gerente está definida como Gerente extends Funcionario implements Autenticavel.
Segue o código.
public abstract class Funcionario {
private String nome;
private String cpf;
private double salario;
public abstract double getBonificacao();
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public double getSalario() {
return salario;
}
public void setSalario(double salario) {
this.salario = salario;
}
}
public abstract interface Autenticavel{
public void setSenha(int senha);
public boolean autentica(int senha);
}
public class Gerente extends Funcionario implements Autenticavel{
private int senha;
public double getBonificacao() {
System.out.println("Chamando o metodo de bonificacao do GERENTE");
return super.getSalario();
}
@Override
public void setSenha(int senha) {
this.senha = senha;
}
@Override
public boolean autentica(int senha) {
if (this.senha == senha) {
return true;
} else {
return false;
}
}
}
public class TesteGerente {
public static void main(String[] args) {
Autenticavel g1 = new Gerente();
g1.setNome("Marco");
g1.setCpf("235568413");
g1.setSalario(5000.0);
System.out.println(g1.getNome());
System.out.println(g1.getCpf());
System.out.println(g1.getSalario());
g1.setSenha(2222);
boolean autenticou = g1.autentica(2222);
System.out.println(autenticou);
System.out.println(g1.getBonificacao());
}
}