public class TestaReferencias {
public static void main(String[] args) {
System.out.println("Aplicando o polimorfismo de maneira eficiente");
Funcionario funcionario = new Funcionario(); //Atribuindo a referência do objeto Funcionario criado a uma variável do tipo Funcionario
funcionario.setSalario(2000);
Gerente gerente = new Gerente(); //Atribuindo a referência do objeto Gerente criado a uma variável do tipo Gerente
gerente.setSalario(5000);
EditorDeVideo editorDeVideo = new EditorDeVideo(); //Atribuindo a referência do objeto EditorDeVideo a uma variável do tipo EditorDeVideo
editorDeVideo.setSalario(3000);
ControleDeBonificacao controleDeBonificacao = new ControleDeBonificacao();
controleDeBonificacao.calcular(funcionario);
controleDeBonificacao.calcular(gerente);
controleDeBonificacao.calcular(editorDeVideo);
System.out.println("Total de bonificações: " + ControleDeBonificacao.getSomaDeBonificacoes());
}
}
Classe ControleDeBonificacao
public class ControleDeBonificacao {
private static int somaDeBonificacoes;
public static int getSomaDeBonificacoes() {
return ControleDeBonificacao.somaDeBonificacoes;
}
/*Explicando:
* O parâmetro que estou recebendo é uma variável que carrega a referência que pode ser para um objeto do tipo Funcionario
* Entretanto, qualquer referência para um objeto que herda de Funcionario poderá ser passado para este método
* Seja uma referência para um objeto do tipo: Gerente, EditorDeVideo, Funcionario
* Isso acontece porque todo Gerente, EditorDeVideo é oriundo de Funcionario
* Mas nem todo Gerente é oriundo de EditorDeViode ou vice versa
* por isso, passamos a referência mais genérica possível para o método*/
public void calcular(Funcionario funcionario) {
System.out.println("Sua bonificação é de: " + funcionario.getBonificacao());
ControleDeBonificacao.somaDeBonificacoes += funcionario.getBonificacao();
}
}