A prática de utilização do polimorfismo se torna vantajoso quando precisamos de delegar ações em comum ao todo. E com isso podemos reutilizar código.
Usando esse mesmo exemplo, suponha que precisamos somar os salários de todas as pessoas da empresa: Gerente, Funcionário, Chefe, Presidente, e por ai vai.
Ao invés de:
List<Gerente> gerentes = // Recupera todos os gerentes
List<Chefe> chefes = // Recupera todos os chefes
List<Secretaria> secretarias = // Recupera todas secretarias
double somaGerente = 0;
for(Gerente gerente : gerentes) {
somaGerente += gerente.getSalario();
}
double somaChefe = 0;
for(Chefe chefe : chefes) {
somaChefe += chefe.getSalario();
}
double somaSecretaria = 0;
for(Secretaria secretaria : secretarias) {
somaSecretaria += secretaria.getSalario();
}
double somaTotal = somaGerente + somaChefe + somaSecretaria;
System.out.println("Soma salario: " + somaTotal);
Podemos reduzir utilizando polimorfismo, considerando que Chefe, Secretaria e Gerente herdam de Funcionário, e que Funcionario tem saldo em comum:
List<Funcionario> funcionarios = // Recupera todos os funcionarios (chefes, secretarias, gerentes)
double somaTotal = 0;
for(Funcionario funcionario : funcionarios) {
somaTotal += funcionario.getSalario();
}
System.out.println("Soma salario: " + somaTotal);
Viu como ficou mais simples o segundo exemplo?
Qualquer dúvida é só falar.
Bons estudos!