1
resposta

Como pode chamarmos de um objeto genérico um metodo que não está nele

Usando o exemplo passado em aula, podemos ver que um objeto que foi criado e referênciado para uma variável de outra classe genêrica não pode chamar métodos do seu proprio objeto, mas sim apenas métodos da sua referência, como no exemplo do cédigo abaixo

Funcionario g1 = new Gerente();
        g1.setNome("Joao");
        //g1.autentica();  - essa linha de código não compila pois autentica não existe na classe funcionário

Tendo isso em mente, no exemplo do video(código de baixo), ao invocarmos o método controle.registra(), por conseguinte invocamos o metodo g1.GetBonificacao(), e aí eu não entendo como vamos parar no método que está dentro da classe Gerente, e não no método que está dentro da classe Funcionario. Na pratica estamos invocando um método que não esta dentro da classe a qual nossa refêrencia faz parte, certo? Isso não era impossível? Tendo em vista o exemplo de cima?

Funcionario g1 = new Gerente();
        g1.setNome("Joao");
        g1.setSalario(5000.0);
public void registra(Funcionario f) {    //metodo
        System.out.println("invoquei registra funcionario");
        double boni = f.GetBonificacao();
        this.soma += boni;
    }
1 resposta

Pelo que entendi o método a ser chamado sempre será o mais específico, neste caso como temos um método getBonificacao() para as classes filhas utilizamos apenas a reescrita ou seja a assinatura do método e chamamos o método específico. E note que em cada tipo de funcionário há uma regra de bonificação específica para tal.

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