1
resposta

Meu código não dá o resultado esperado

Olá pessoal, estou na aula "Super com Métodos" e estou tentando fazer com que meu programa imprima na tela o valor do salário de um gerente com bonificação, mas ele imprime o valor 0.0 , alguém sabe me dizer oq há de errado ? Segue o código abaixo:

Classe Funcionário:

public class Funcionario {

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

    public double getBonificacao() {
        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;
    }


}

Classe Gerente:

public class Gerente extends Funcionario {

    private String nome;
    private String cpf;
    private double salario;
    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() {
         return super.getBonificacao() + super.getSalario();
     }



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

}

Classe para testar o Gerente:

public class TesteGerente {

    public static void main(String[] args) {

        Gerente g1 = new Gerente();
        g1.setNome("Pedro Martins");
        g1.setCpf("999.888.777.55");
        g1.setSalario(6000.0);

        System.out.println(g1.getNome());
        System.out.println(g1.getCpf());
        System.out.println(g1.getSalario());

        g1.setSenha(2222);

        boolean autenticou = g1.autentica(2222);
        System.out.println(autenticou);


        System.out.println(g1.getBonificacao());

    }

}

Resultado no console:

Pedro Martins
999.888.777.55
6000.0
true
0.0

Como podem ver o valor impresso é "0.0" mas na verdade eu queria o valor do salário com a bonificação de gerente. Alguém sabe me dizer como solucionar esse problema ?

1 resposta

Oi Douglas, tudo beleza ? Pelo que eu vi a lógica está errada nessa parte

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

Esse trecho de código está na classe gerente. Basicamente você está chamando o método getBonificacao (O que está certo), porém você está passando um super.getSalario(), o que significa que você está chamando o salário da classe Funcionario. Um jeito simples de resolver o seu problema será remover o super e deixar apenas getSalario(), ou também você pode fazer, o que ao meu ver é mais comum this.salario.