Bom dia pessoal, tudo certo?
Eu fiz 3 instanciações (funcionário, gerente, editorvideo) onde a referencia usada é relativa ao tipo de cada objeto. Entao:
Funcionario f1 = new Funcionario(); Gerente g1 = new Gerente(); EditorVideo ev1 = new EditorVideo(); ControleBonificacao controle1 = new ControleBonificacao();
E também fiz outras 3 instaciações onde eu uso a referencia mais genérica:
Funcionário f2 = new Funcionario(); Funcionario g2 = new Gerente(); Funcionario ev2 = new EditorVideo(); ControleBonificacao controle2 = new ControleBonificacao();
Entao, de acordo com o que foi explicado no vídeo (ou pelo menos o que eu entendi), apenas deveria ser possível calcular a soma das Bonificacoes com as instancias que utilizam a referencia genérica. Porém, no meu código, eu consigo registrar e fazer a soma também com os outros objetos também (g1, f1, ev1). Por que isso está acontecendo?
Segue o código completo:
public class Gerente extends Funcionario {
private int senha;
public Gerente(){
super.setSalario(1000);
}
public void setSenha(int senha){
this.senha = senha;
}
public boolean autenticaSenha(int senha){
if(this.senha == senha){
System.out.println("Bem vindo");
return true;
} else{
System.out.println("Senha incorreta");
return false;
}
}
public double getBonificacao(){
return super.getBonificacao() + super.getSalario();
}
public class EditorVideo extends Funcionario {
private int senha;
public EditorVideo(){
super.setSalario(500.0);
}
public void setSenha(int senha){
this.senha = senha;
}
public boolean autenticaSenha(int senha){
if(this.senha == senha){
System.out.println("Bem vindo");
return true;
} else{
System.out.println("Senha incorreta");
return false;
}
}
public double getBonificacao(){
return super.getBonificacao() + 100.0;
}
public class ControleBonificacao {
private double soma;
public void registra(Funcionario f) { // SE TROCARMOS Funcionario POR Gerente ou EditorVideo, SÓ FUNCIONARÁ
double boni = f.getBonificacao();
this.soma += boni;
}
public double getSoma() {
return soma;
}
}
public class TesteReferencia {
public static void main(String[] args){
// OBJETOS COM O MESMO TIPO DE REFERENCIA:
Funcionario f1 = new Funcionario();
Gerente g1 = new Gerente();
EditorVideo ev1 = new EditorVideo();
ControleBonificacao controle1 = new ControleBonificacao();
controle1.registra(f1);
controle1.registra(g1);
controle1.registra(ev1);
System.out.println(controle1.getSoma());
System.out.println();
// OBJETOS COM A REFERENCIA DO TIPO MAIS GENÉRICA
Funcionario f2 = new Funcionario();
Funcionario g2 = new Gerente();
Funcionario ev2 = new EditorVideo();
ControleBonificacao controle2 = new ControleBonificacao();
controle2.registra(f2);
controle2.registra(g2);
controle2.registra(ev2);
System.out.println(controle2.getSoma());
System.out.println();
O valor dos dois dá 1275 Porém, eu achava que nem deveria calcular a soma das bonificaçoes de g1, f1 e ev1 ...