1
resposta

Aplicando Polimorfismo

Fiquei com uma dúvida referente a aula de Polimorfismo, no capítulo Entendendo Polimorfismo. O professor incrementou a saída de dado nas classes EditorVideo e Gerente com os comandos.: System.out.println("Testando bonificação do Editor de Video"); e System.out.println("Testando bonificação do Gerente");

Quis realizar o mesmo teste, porém na classe Funcionário com o comando.: System.out.println("Testando bonificação do Funcionario");

Assim que o programa é executado, me retornam as seguintes linhas.: Testando bonificação do Gerente Testando bonificação do Funcionario Testando bonificação do Funcionario Testando bonificação do Editor de Video Testando bonificação do Funcionario 5575.0

Tentei acompanhar o código, porém não consegui "debugar" para entender o motivo de ter triplicado a informação do Funcionário. Poderiam me ajudar a entender por gentileza?

1 resposta

Fala Daniel, tudo bem?

Pelo que você está falando eu supeito que seja por usar o super do método getBonificacao().

public class Gerente extends Funcionario {

        /*código omitido*/

        public double getBonificacao() {
            System.out.println("Chamando o método bonificacao do GERENTE");
            return super.getBonificacao() + super.getSalario();  //aqui vc está chamando o método getBonificacao da classe mãe (no caso Funcionario) por causa do super
        }
}

Nesse caso, se tiver um System.out.println("Chamando o método bonificacao do FUNCIONARIO) no método getBonificacao() de Funcionario, ele vai ser chamado quando as classes filhas fizerem a chamada do super, o que poderia resultar nesse cenário que você descreveu.

Então, caso a gnt chamasse o método getBonificacao() do Gerente ele imprimiria esse resultado:

"Chamando o método bonificacao do GERENTE"
"Chamando o método bonificacao do FUNCIONARIO"

Caso não seja isso, bota o código aqui que a gnt descobre o que é =)