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