Oie Ricardo, tudo bem contigo?
Não sei se entendi muito bem sua dúvida, mas vamos lá
O que informa a jvm quais métodos serão chamados numa relação de herança é a referência usada no momento de instanciar o objeto, por isso se for feito assim Funcionario gerente = new Gerente();
só poderá ser acessado os métodos que pertencem a classe "Funcionario". Agora se for feito assim Gerente gerente = new Gerente();
todos os métodos, tanto os pertencentes a classe "Funcionario" quanto aos criados diretamente na classe "Gerente" poderão ser acessados.
Agora se por exemplo, o método "getBonificacao" da classe "Funcionario" for reescrito na classe "Gerente", por mais que se seja assim Funcionario gerente = new Gerente();
a implementação chamada ainda será aquela que foi reescrita na classe "Gerente". E as coisas acontecem dessa forma, pois é assim que a JVM interpreta.
Espero ter conseguido ajudar!
Se ainda restar qualquer dúvida estarei por aqui :)
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!