No exemplo foi usado dois métodos com o mesmo nome: autentica. Não poderia ter um método chamado autenticaSenha e outro chamado autenticaLoginSenha. 
Quando é aconselhável usar método e quando usar sobrecarga?
Código do exemplo:
public class Gerente extends Funcionario {
    private int senha;
    public void setSenha(int senha) {
        this.senha = senha;
    }
    public boolean autentica(int senha) {
        if(this.senha == senha) {
            return true;
        } else {
            return false;
        }
    }
    //novo método, recebendo dois params
    public boolean autentica(String login, int senha) {
        //implementacao omitida
    }
    //outros métodos omitidos
}