Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Duvida Polimorfismo

No caso abaixo, apesar da ref. ser Funcionário o objeto não é do tipo gerente? Sendo assim o Gerente tem o método invocado e deveria compilar normalmente?

Funcionario f = new Gerente();
f.autentica(1234);
1 resposta
solução!

Faz sentido, Diego, porém vamos dar uma olhada na estrutura criada:

class Funcionario {
    // metodos do funcionario
}
class Gerente extends Funcionario {

    public void autentica(int valor) {
        //....
    } 

    //Outros métodos exclusivos do gerente
}

Ao fazermos...

Funcionario f = new Gerente();
f.autentica(1234);

... o compilador vai "toscamente" olhar a linha f.autentica(1234) para responder a seguinte pergunta:

"O tipo da referência f (classe Funcionario) possui o método autentica que é público e recebe um parâmetro inteiro?"

Como essa pergunta possui uma resposta negativa (afinal de contas, o método não está no tipo Funcionario) há um erro de compilação.

Então, respondendo sua pergunta inicial:

"apesar da ref. ser Funcionário o objeto não é do tipo gerente?"

Sim. O objeto é do tipo Gerente, porém ao chegar na linha abaixo, o compilador verificará que referência f não possui o método chamado, disparando um erro.

Abraço!