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

Chamada de método abstrado

Olá. Na aula 5, lição 3, vimos como utilizar métodos abstrados. Porém, fiquei com uma dúvida na classe ControleBonificacao. Nela, existe o seguinte código:

public class ControleBonificacao {
    private double soma;

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

    public double getSoma() {
        return soma;
    }
}

No caso do método registra, ele chama um método abstrado da classe Funcionario (getBonificao). Neste caso, como funciona/compila se não há implementação na classe Funcionario?

Obrigado!

2 respostas
solução!

Oie Marlos, tudo bem contigo?

Realmente não há implementação na classe "Funcionario" por ela ser abstrata, entretanto a implementação acontece nas classes que herdam "Funcionario", tanto "Gerente", "Designer" e "EditorVideo" fazem uma implementação do método "getBonificacao". Importante lembrar que no final nunca vai ser criado uma instância de "Funcionario" (por conta de ser abstrata) só das classes filhas, por isso o método "registra" recebe como parâmetro uma das classes filhas de "Funcionario", que por conta do polimorfismo, "Funcionario" sendo um tipo mais genérico permite que as classes filhas utilizem uma variável do tipo "Funcionario" como referência.

Por isso no final o método registra poderia ser entendido dessa forma:

public void registra() {
        Funcionario f = new Gerente(); // nesse exemplo aqui ao invés do objeto vir através do parâmetro ele foi instanciado diretamente.
        double bonific = f.getBonificacao();
        this.soma+=bonific;
    }

Espero tenha conseguido responder sua dúvida, se ainda tiver qualquer questão pode mandar por aqui :)

Bons estudos!

Excelente, Igor! Muito obirgado!