Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

método ControleBonificacao() do Gerente está chamando também o do Funcionario

Olá, Pela explicacao do professor, eu tinha entendido que quando invocamos controle.registra(g1); ,por exemplo, somente o método de bonificacao específico do gerente seria executado. Porém, ao adicionar System.out.println("chamando metodo de bonificacao do funcionario"); an classes Funcionario, percebi que ao executar TesteReferencias, isso também foi impresso. Isso quer dizer que ao invocar o método getBonificacao() do Gerente, o do Funcionario também está sendo executado?

Obrigado!

3 respostas

Boa noite, Roger! Como vai?

Vc poderia colar aqui o código completo das classes Funcionario, Gerente e da classe de teste? Assim poderei te ajudar de forma mais efetiva!

Obs.: Quando for postar o código, utilize o botão "inserir código" e cole-o no lugar indicado para que seja formatado da forma correta.

Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

obrigado pela ajuda, Gabriel!

public class Funcionario {

    private String nome;
    private String cpf;
    private double salario; 

    public double getBonificacao() {
        System.out.println("chamando metodo de bonificacao do funcionario");
        return this.salario* 0.05;
    }

    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public String getCpf() {
        return cpf;
    }
    public void setCpf(String cpf) {
        this.cpf = cpf;
    }
    public double getSalario() {
        return salario;
    }
    public void setSalario(double salario) {
        this.salario = salario;
    }

}

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;
        }

    }

    public double getBonificacao() {
        System.out.println("chamando o metodo de bonificacao do gerente");
        return super.getBonificacao() + super.getSalario(); //
    }

}
public class TesteReferencias {
    public static void main(String[] args) {

        Funcionario g1 = new Gerente();
        g1.setSalario(5000.0);

        Funcionario f = new Funcionario();
        f.setSalario(2000.0);

        Funcionario ev = new EditorVideo();
        ev.setSalario(2500.0);

        ControleBonificacao controle = new ControleBonificacao();
        controle.registra(g1); 
        controle.registra(f);
        controle.registra(ev);



        System.out.println(controle.getSoma());


    }

}
solução!

Olá, Roger!

Sim ao chamar o getBonificacao() do gerente está chamando o do funcionário.

Este é o código da função do Gerente.

public double getBonificacao() {
        System.out.println("chamando o metodo de bonificacao do gerente");
        return super.getBonificacao() + super.getSalario(); //
    }

Se reparar no retorno da função vai perceber que está chamando super.*, quando inserido dessa forma o super vai executar a função da classe pai. Ou seja do funcionário, em vista que o gerente herda do funcionário.