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

Por que controle.getSoma() retorna o valor correto?

Seguindo o código:

public class ControleBonificacao {

    private double soma;

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

    public double getSoma(){
        return this.soma;
    }

}

No método registra eu aponto o objeto desejado. Digamos que seja Gerente joao. A variável bonificacao vai receber o valor da bonificação do salário de joao. No caso é 5% de 5000, ou seja, 250. Depois o valor 250 será somado ao valor da variável soma que é zero. *Aqui começa o problema para mim. * Quando eu dou System.out.println em controle.getSoma() aparece 5250. Na minha cabeça era para aparecer apenas 250. Em que momento do código eu estou somando 5000 + 250?

2 respostas
solução!

Olá, Saulo, tudo bem?

Como está o método getBonificacao() da sua classe gerente?

Provavelmente está algo como:

public double getBonifacao() {
        return super.getBonifacao() + super.getSalario();
    }

O que irá pegar a bonificação normal de um funcionário, somado do salário do gerente, gerando assim os 5250.

Se você quer que a bonificação do Gerente seja igual a do funcionário, 5%, coloque o método apenas na classe funcionário.

Caso você queira que o Gerente tenha por exemplo, 20% de bonificação, na classe Gerente coloque o método:

public double getBonifacao() {
        return super.getSalario() * 0.2;
    }

Lembrando que estou dando meus primeiros passos também, mas realizei testes aqui e deu certo o que lhe respondi.

Agora ficou claro. Existem dois getBonificacao(). Um na classe Funcionario e outro na classe Gerente. Eu havia esquecido da existência do segundo e verificando apenas na classe mãe. É de lá que se está pegando o método que soma. Justamente por ser uma instância direta daquela classe. Obrigado, cara.