2
respostas

O que está acontecendo? Com ou sem static.

Construí uma classe com um método que utiliza seu atributo "soma", não static. Esse soma recebe a soma de um cálculo realizado para determinado objeto e o valor de soma daquela classe. Porém construí sem o static e soma guarda o valor para o método aplicado a diferentes objetos.

Classe mãe:

package com.alura.heranca;

public class Funcionario {
    private String nome;
    private String cpf;
    private double salario; // publico para os filhos

    public Funcionario() {

    }

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

Classes filhas:

package com.alura.heranca;


public class Gerente extends Funcionario {

    private int senha = 1234;


    public Gerente() {

    }

    public boolean valida(int senha) {
        if(senha == this.senha) {
            return true;
        }
        return false;
    }

    public double getBonificacao() { // sobrescrita usa a mesma assinatura do método
        return super.getBonificacao() + super.getSalario();
    }

}

2:

package com.alura.heranca;

public class Divisao extends Funcionario {
    char setor;
    int area;

    public Divisao(char setor, int area) {
        this.setor = setor;
        this.area = area;
    }

    public double getBonificacao() {
        return super.getBonificacao()*5;
    }
}

Classe de teste de polimorfismo:

package com.alura.heranca;

public class ControleBonificacao {

    private double soma;

    public void registra(Funcionario funcionario) {
        double boni = funcionario.getBonificacao();
        this.soma += boni; 
        System.out.println(this.soma);
    }

    public double getSoma() {
        return soma;
    }
}

Classe main:

package com.alura.heranca;

public class TesteReferencias {

    public static void main(String[] args) {

        Gerente marco = new Gerente(); 
        marco.setSalario(2000);
        Divisao elisa = new Divisao('b', 135);
        elisa.setSalario(10000);



        ControleBonificacao controle = new ControleBonificacao();
        controle.registra(marco);
//        System.out.println(controle.getSoma());
        controle.registra(elisa);
        System.out.println(controle.getSoma());
    }

}
2 respostas

Ola Camila,

No seu método 'main' você instancia:


1 Gerente -> salário de 2000  ->  getBonificação() retornará 2000* 0.05 + 2000 = 2100
1 Divisao -> salário de 10000  -> getBonificação() retornará 10000* 0.05*5 = 2500

O seu objeto ControleBonificacao incrementa o atributo 'soma' chamando o método 'registra()' .

No final a chamada 'System.out.println(controle.getSoma());' deve estar imprimindo '4600' correto?

Como o atributo 'soma' não é 'static' se você criar outro objeto da classe ControleBonificacao o 'soma' desse novo objeto não terá o valor do 'soma' do primeiro objeto.

'static' define que atributos ou métodos pertencem a classe e não ao objeto.

Ahhhhhhhhhhhhhhhhhh mas é claro!!! Obrigada, Gui, nem reparei nisso!

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