Herança com polimorfismo
Em sistemas de RH reais, funcionários têm diferentes regras de cálculo de salário (comissionados, horistas, etc.). Em vez de escrever condicionais enormes com instanceof, você usa polimorfismo: uma única lista de Funcionario chama o método getSalario() de cada um, e o Java executa a versão correta automaticamente. Isso elimina if desnecessários e torna o código extensível — novo tipo de funcionário só precisa estender a superclasse.
O PROBLEMA
Funcionario e Gerente com bônus. ArrayList mista calcula folha.
EXEMPLO
Folha total calculada com polimorfismo
SOBRE O CONCEITO
Polimorfismo com herança permite tratar objetos de classes derivadas (Gerente) como objetos da superclasse (Funcionario), mas o método executado é o da classe real do objeto. O erro comum é não sobrescrever getSalario() em Gerente: sem @Override, o método da superclasse é chamado, ignorando o bônus. Aí a folha fica errada. A anotação @Override avisa o compilador se você não estiver realmente redefinindo o método. Use super.getSalario() dentro do @Override para reaproveitar o cálculo base e depois adicionar o bônus. Com ArrayList<Funcionario> e um loop for-each, você chama getSalario() polimorficamente — sem instanceof.
RESOLUÇÃO