1
resposta

Implementação Diferente da Aula Não funciona

Na classe SistemaInterno, ao invés de criar um método autentica, eu alterei o nome para login, por ser mais pertinente. Pórem, para minha surpresa o codigo do TestaSistemaInterno não esta compilando.

Vejam o código do SistemaInterno.class e TestaSistemaInterno.java:

public class SistemaInterno {

    private int senha = 2222;

    public void login(FuncionarioAutenticavel fa) {
        boolean autenticacao = fa.autentica(this.senha);
        if(autenticacao) {
            System.out.println("Entrou com sucesso");
        } else {
            System.out.println("Senha invalida");
        }
    }
}
public class TestaSistemaInterno {

    public static void main(String[] args) {
        Gerente g = new Gerente();
        g.setSenha(2222);

        Administrador adm = new Administrador();
        adm.setSenha(3333);

        SistemaInterno si = new SistemaInterno();
        si.login(g);
        si.login(adm);

    }
}

As mensagens de erro que aparecem ao lado de si.login(g); e si.login(g) são as seguintes, respectivamente:

The method login(Gerente) is undefined for the type SistemaInterno

The method login(Administrador) is undefined for the type SistemaInterno

Quando eu uso autentica no nome do método do SistemaInterno o código funciona normalmente, conforme mostrado na aula. Mas, ai fica a pergunta, porque esta dizendo que o método login não esta definido no codigo da classe SistemaInterno para o Gerente e Admistrador nesse caso?

Abaixo estão o código das classes FuncionarioAutenticavel, Gerente e Administrador:

public abstract class FuncionarioAutenticavel extends Funcionario {

    private int senha = 2222;

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

    public boolean autentica(int senha) {
        if(this.senha == senha) {
            return true;
        } else {
            return false;
        }
    }

}
public class Administrador extends FuncionarioAutenticavel {

    @Override
    public double getBonificacao() {        
        return 50;
    }
}
public class Gerente extends FuncionarioAutenticavel {

    @Override
    public double getBonificacao() {

        return super.getSalario();
    }
}
1 resposta

Boa noite, Thiago! Como vai?

Olhando somente o código que vc mandou me pareceu que tudo está correto! Vc poderia compartilhar o seu código no github e mandar o link aqui? Assim eu poderei dar uma olhada melhor pra tentar te ajudar!

Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!