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();
}
}