1
resposta

09 Mãos na massa: Trabalhando com interfaces

public class SistemaInterno {

    private int senha = 2222;

    public void autentica(FuncionarioAutenticavel fa) { // foi criado mas não consegue chamar ele na classe TesteSistema

        boolean autenticou = fa.autentica(this.senha);

        if(autenticou) {

            System.out.println("Entrada foi altorizada");

        }else {

            System.out.println("Não pode entrar no sistema");

        }
    }

}

**************************************************************************
public class TesteSistema {

    public static void main(String[] args) {

        Gerente g  =  new Gerente();
        g.setSenha(2222);

        SistemaInterno si = new SistemaInterno();

        si.autentica(fa); //com erro, nao consegue achar o autenticavel fa, mas 
    }

}
**************************************************************************
public abstract interface Autenticavel {

    public abstract void setSenha(int senha);

    public abstract boolean autentica(int senha); 

}

**************************************************************************
public class Cliente implements Autenticavel{

    private int senha;

    @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 abstract class Funcionario {

    private String nome;
    private String cpf;
    private double salario; /*Puclico para os filhos */

    //Método sem corpo, não há implementação    
    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 class  FuncionarioAutenticavel extends Funcionario {

    private int senha;

    public void setSenha(int senha) {
        this.senha = senha;
    }

    public boolean autentica(int senha) {

        if(this.senha== senha) {
            return true;

        }else {
            return false;
        }
    }

}

o meu codigo esta dando errado , na classe TesteSistema

SistemaInterno si = new SistemaInterno();

        si.autentica(fa); //Não consegue achar

Pro favor não estou vendo onde esta o meu erro

Obrigado!

1 resposta

Boa noite Andre,

Na verdade o FuncionarioAutenticavel "fa" não foi criado na classe TesteSistema, e portanto ele não acha. Você precisa dentro do escopo da Classe, pode ser dentro do método main, instanciar a classe FuncionarioAutenticavel .

Mas acredito que o que quis testar foi o Gerente que instanciou na linha acima, então acredito que queria passar o gerente para o seu teste.

  Gerente g  =  new Gerente();
        g.setSenha(2222);

        SistemaInterno si = new SistemaInterno();

        si.autentica(g);   // g ao invés de fa