Para explica minha dúvida vou usar alguns exemplos da aula.
na linha Funcionario ff = new Gerente();
Se eu tentar pegar algum método especifico do Gerente através da variável ff o compilador vai dar erro, e se eu tentar pega algum metodo que existe na classe Funcionario e também existe na classe gerente o compilador vai executar o método da classe Funcionario.
então por exemplo se eu fizer ff.getBonificacao
o java vai executar o método que seja da classe Funcionario e não dá classe Gerente. Sendo assim porque nessa imagem o java consegue entender que eu quero usar o método especifico do objeto que eu passei? ele não consegue apenas saber os métodos do tipo da variável? qual a diferença disso para o outro exemplo que dei acima?