Pessoal, em polomorfismo/herança fiquei confuso sobre variáveis de referência e queria saber se compreendi direito
Dei uma lida em Java Como Programar (8ed) e estou lendo o livro da Kathy para certificação SCJP 1.5
primeiramente, o livro da kathy diz assim:
Invocações de métodos permitidas pelo compilador são baseadas somente no tipo de referência declarado, independentemente do tipo do objeto
entao se temos, por exemplo:
PlayerPiece player = new PlayerPiece();
a primeira PlayerPiece, logo antes do 'player', é o tipo da referência
a segunda PlayerPiece, logo depois do 'new', é o tipo do objeto
agora analisando um caso de polimorfismo, exemplo tirado do livro Java Como Programar:
Classe abstrata Funcionario tem o método abstrato beneficios();
Duas classes herdam a classe Funcionario: FuncionarioHora e FuncionarioComissao, cada uma sobrescrevendo seu próprio método beneficios
Dai vem o trecho de codigo (modifiquei pra colocar somente informaçao relevante pra minha duvida) :
HourlyEmployee hourlyEmployee = new HourlyEmployee(); // FuncionarioHora
ComissionEmployee comissionEmployee = new ComissionEmployee(); //FuncionarioComissao
Employee[] employees = new Employee[2]; //Employee seria o que chamei de Funcionario. a classe abstrata com o metodo beneficios();
employees[0] = hourlyEmployee;
employees[1] = comissionEmployee;
System.out.println("Employees processed polymorphically:\n");
for(Employee currentEmployee : employees)
{
System.out.printf("earned $%,.2f\n\n",currentEmployee.beneficios() ); //acessa o metodo beneficios de cada subclasse de Employee (funcionario).
}
agora, finalmente, a dúvida:
no trechoemployees[0] = hourlyEmployee;
Desde já agradeço!
Abraço.