Apenas para ter certeza que o raciocínio é comparável.
Funcionario f = new Gerente();
f.autentica(1234);
O trecho de código acima não funciona assim como o seguinte abaixo não funcionaria
JogadorDeFutebol buffon = new Goleiro();
pegaBolaComAMao();
porque goleiro é um tipo específico de jogador, mas nem todo jogador de futebol é goleiro, podendo pegar a bola com a mão. Logo, isso quer dizer que, em Java, o método vai ser buscado no marcador de tipo da variável. É isso?