Fiz o teste de colocar em meu codigo o sysout para poder ver se realmente estava chamando o metodo correto, mas ao executar o TestaReferencia o console traz o código duplicado, mostrando a menssagem do gerente e do funcionario.
O resultado do console --- Darlan de Sousa Chamando o metodo do gerente Chamando o metodo do Funcionario Chamando o metodo do Funcionario Chamando metodo do Editor Chamando o metodo do Funcionario
public class TesteReferencias {
public static void main(String[] args) {
Gerente g = new Gerente ();
g.setNome("Darlan de Sousa");
System.out.println(g.getNome());
g.setSalario(5000);
Funcionario f = new Funcionario();
f.setSalario(2000);
EditorVideo e = new EditorVideo();
e.setSalario(2500);
ControleBonificacao c = new ControleBonificacao();
c.registro(g);
c.registro(f);
c.registro(e);
System.out.println(c.getSoma());
}
}
public class Gerente extends Funcionario {
private int senha;
public Gerente() {
}
public void setSenha(int senha) {
this.senha = senha;
}
public boolean autentica(int senha) {
if (this.senha == senha) {
return true;
}
return false;
}
public double getBonificacao() {
System.out.println("Chamando o metodo do gerente");
return super.getBonificacao() + super.getSalario();
}
}
public class Funcionario {
private String nome;
private String cpf;
private double salario;
public Funcionario() {
}
public double getBonificacao() {
System.out.println("Chamando o metodo do Funcionario");
return this.salario * 0.05;
}
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 class ControleBonificacao {
private double soma;
public void registro(Funcionario f) {
double boni = f.getBonificacao();
this.soma = this.soma + boni;
}
public double getSoma() {
return soma;
}
}
public class EditorVideo extends Funcionario{
public double getBonificacao() {
System.out.println("Chamando metodo do Editor");
return super.getBonificacao() + 100;
}
}