2
respostas

[Dúvida] Não necessitei do uso de polimorfismo, mesmo sem gerar funções de registro para cada subclasse

Meu código funcionou corretamente mesmo sem o uso de polimorfismo para definir as subclasses como funcionário.

Obs: também não precisei criar Registros específicos para cada subclasse Obs: o resultado no console bate com os resultados esperados dentro do meu código

Classe de Registro para realização da soma package bytebank_herdado;

public class Registro {
    private double soma;


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

    public double getSoma() {
        return this.soma;
    }
}
public class TestaGerente {
    public static void main(String[] args) {

        Gerente marselo = new Gerente();
        marselo.setSalario(4800.0);        

        Diretor ale = new Diretor();
        ale.setSalario(5500.0);

        Funcionario rau = new Funcionario();
        rau.setSalario(2400.0);


        Registro calculoBonificacoes = new Registro();
        calculoBonificacoes.registra(rau);
        calculoBonificacoes.registra(ale);
        calculoBonificacoes.registra(marselo);

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

}

Classe de teste do registro Classe de teste

2 respostas

Oi Leonardo! Tudo certo?

Ao dizer que não usou polimorfismo para definir as subclasses como funcionário, você quer dizer que não fez as classes gerente e editor herdarem de funcionário?

Pergunto isso porque se você fez a herança e seu método getBonificacao() está recebendo um funcionário na assinatura dele, e ao chamá-lo você passa um tipo mais específico, você já está usando o polimorfismo. Dessa forma, você não precisa criar métodos dentro de cada classe filha. E essa é uma das aplicações do polimorfismo!

Espero ter contribuído, abraços e bons estudos!

Eu penso que você usou polimorfismo no código a seguir:

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

Observe que você declarou uma classe genérica no parâmetro do método registrar. Desta forma você está usando polimorfismo, visto que o método pode receber qualquer objeto que extenda a classe Funcionario. E foi exatamente o que você fez no código a seguir:

...
Registro calculoBonificacoes = new Registro();
calculoBonificacoes.registra(rau); // Gerente
calculoBonificacoes.registra(ale); // Diretor
calculoBonificacoes.registra(marselo); // Funcionario
...

Boa man.