Funcionario g1 = new Gerente();
Ainda não consegui entender isso.
g1 vai ser um objeto da classe Gerente, mas como foi guardado numa referência Funcionario não vai poder acessar a variável int senha e nem o método public boolean autentica(int senha).