E aí José, tudo bem? Assim, vou expor minha humilde opinião, talvez tenha outras pessoas que entendam mais, na minha opinião, essa exemplificação:
Funcionario g1 = new Gerente();
É mais para explicar o que realmente representa o polimorfismo, fazer com que uma especialização possa ser representada por algo mais genérico, algo que seja mais Generalizado, no caso do método, por exemplo, você iria ficar criando vários para atender sua lógica (seja ela relacionada à alguma empresa ou projeto acadêmico), então você usa o polimorfismo para apresentar uma forma de dizer: Olha, para todo FUNCIONARIO, que passar pela porta perguntando sobre seu salário, além de passar pela porta como funcionário, irá ser tratado conforme especificado na sua estrutura (Classe), ou seja, se um gerente usar algum método, esse método vai ser específico do Gerente, é o que a gente encara como associação no tempo de execução, o poder do polimorfismo é exatamente esse, mas lembre-se, existem as interfaces, e uma porção de especificações no Java, espero ter te ajudado. Lembrando, isso não quer dizer que você não possa usar:
Funcionario g1 = new Gerente();
Isso quer dizer, que existem momentos e hora para ser usado, se você perceber que em algum momento você vai precisar usar isso, então talvez seja essa a hora, mas o Polimorfismo é isso: Poder tratar algo específico em algo concreto que o represente.
Abraços.