5
respostas

Dúvida sobre a saída e um exercício

Meu código:

public class TesteReferencia {

    public static void main(String[] args) {

        Gerente g1 = new Gerente();
        g1.setNome("Paulo");
        g1.setSalario(5000.00);

        Funcionario f1 = new Funcionario();
        f1.setNome("Pedro");
        f1.setSalario(2000.00);


        EditorDeVideo e1 = new EditorDeVideo();
        e1.setNome("Carol");
        e1.setSalario(2500.00);

        ControleBonificacao controle = new ControleBonificacao();
        controle.registra(f1);
        controle.registra(g1);
        controle.registra(e1);


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

Saída:

Bonificação Funcionário!
Bonificação Gerente!
Bonificação Funcionário!
Bonificacao editor!
Bonificação Funcionário!
5575.0

A dúvida é, porque a saída sempre repete o funcionário?


Atividade que tenho dúvida se encontra no terceiro tópico nomeada "Qual a saída?"

5 respostas

Oi Raphael

Envia o código das classes Gerente, Funcionario, EditorDeVideo e ControleBonificacao também, por favor.

CONTROLE BONIFICAÇÃO


public class ControleBonificacao {

    private double soma;

    public void registra(Funcionario f) {
        double bonificacao = f.getBonificacao();
        this.soma += bonificacao;
    }

    public double getSoma() {
        return soma;
    }
}

GERENTE

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 Gerente() {
    }

    public double getBonificacao() {
        System.out.println("Bonificação Gerente!");
        return super.getBonificacao() + super.getSalario();
    }

}

EDITOR DE VÍDEO

public class EditorDeVideo extends Funcionario {

    public EditorDeVideo() {
    }
    //Construtor

    public double getBonificacao() {
        System.out.println("Bonificacao editor!");
        return super.getBonificacao() + 100.00;

    }
}

FUNCIONÁRIO


public class Funcionario {

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

    public Funcionario() {
    }

    public double getBonificacao() {
        System.out.println("Bonificação Funcionário!");
        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;
    }

}

Ainda sem solução :\

public double getBonificacao() { return (this.salario * 0.05) + this.salario;//Nesse ponto é pra ser a soma da bonificação junto com o salário. No código lá do professor tá só o cálculo da bonificação, mas tu deixando dessa forma aqui, ele resolve o problema pra esse e para os demais. }

public double getBonificacao() {//Isso aqui seria na classe gerente System.out.println("Chamando o método de bonificacao do Gerente"); return super.getBonificacao();

public double getBonificacao() {//E isso aqui na class editor de video System.out.println("Bonificação do Editor de Vídeo"); return super.getBonificacao() + 100; } E o que aconteceu nessa última aula é que ele tá somando todas as bonificações e tá colocando tudo em único salário pra uma única pessoa. Eu compreendi dessa forma e corrigi tbm fazendo isso aqui:

Funcionario g1 = new Gerente(); g1.setNome("Victor");

    System.out.println(g1.getNome());
    g1.setSalario(5000.0);

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

    EditorVideo ev1 = new EditorVideo();
    ev1.setSalario(3000.0);


    ControleBonificacao controle1 = new ControleBonificacao();
    ControleBonificacao controle2 = new ControleBonificacao();
    ControleBonificacao controle3 = new ControleBonificacao();
    controle1.registra(g1);//bonificacao do gerente
    controle2.registra(f1);//bonificacao do funcionario
    controle3.registra(ev1);//bonificacao do editor de vídeo
    System.out.println(controle1.getSoma());
    System.out.println(controle2.getSoma());
    System.out.println(controle3.getSoma());

//Dessa forma aí, ele vai bonificar separadamente cada um, e vai somar corretamente nos devidos salários e printar o valor final. //A forma como o professor mostrou, seria sei lá, pra mostrar a soma das bonificações que a empresa paga, e não a soma das bonificações junto ao salário separadamente... //Espero que tenha ajudado, pois na aula fiquei um pouco perdido tbm sem entender porque as bonificações estão todas juntas e não separadas...

Acabei enviando outra solução. Cara seguinte, quando o pessoal escreve o código eles dão um " return super.getBonificacao(); " Isso faz com que a classe funcionario, que é a classe super ou mãe seja sempre acionada para calcular o salário, acho que por isso "Bonificacao Funcionario" fica mostrando direto.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software