public class TesteReferencias {
public static void main(String[] args) {
Gerente g1 = new Gerente();
g1.setNome("Marcos");
g1.setSalario(5000.0);
Funcionario f = new Funcionario();
f.setSalario(2000.0);
EditorVideo ev = new EditorVideo();
ev.setSalario(2500.0);
ControleBonificacao controle = new ControleBonificacao();
controle.registra(g1);
controle.registra(f);
controle.registra(ev);
System.out.println(controle.getSoma());
}
}
No código acima estamos passando diversos tipos de funcionários para o método registra.
A seguir temos o código de ControleBonificacao:
public class ControleBonificacao {
private double soma;
public void registra(Funcionario f) {
double boni = f.getBonificacao();
this.soma = this.soma + boni;
}
public double getSoma() {
return soma;
}
}
Minha dúvida é: por que o método registra() invoca o método específico do objeto, e não o da superclasse? Para melhor entendimento, por exemplo, estou enviando o objeto Gerente g1 como argumento, porém o método registra() o recebe como uma referência Funcionário f, correto? Então por que o método não invoca o getBonificacao() da referência f?