Usando o exemplo passado em aula, podemos ver que um objeto que foi criado e referênciado para uma variável de outra classe genêrica não pode chamar métodos do seu proprio objeto, mas sim apenas métodos da sua referência, como no exemplo do cédigo abaixo
Funcionario g1 = new Gerente();
g1.setNome("Joao");
//g1.autentica(); - essa linha de código não compila pois autentica não existe na classe funcionário
Tendo isso em mente, no exemplo do video(código de baixo), ao invocarmos o método controle.registra(), por conseguinte invocamos o metodo g1.GetBonificacao(), e aí eu não entendo como vamos parar no método que está dentro da classe Gerente, e não no método que está dentro da classe Funcionario. Na pratica estamos invocando um método que não esta dentro da classe a qual nossa refêrencia faz parte, certo? Isso não era impossível? Tendo em vista o exemplo de cima?
Funcionario g1 = new Gerente();
g1.setNome("Joao");
g1.setSalario(5000.0);
public void registra(Funcionario f) { //metodo
System.out.println("invoquei registra funcionario");
double boni = f.GetBonificacao();
this.soma += boni;
}