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

Dúvida Polimorfismo parte 2

Bom dia! Eu tive a mesma dúvida que todos e o fórum ajudou um pouco a resolver isso. Bem no tópico "Dúvida Polimorfismo" responde que no seguinte exemplo o método autentica não pode ser compilado, pois o compilador irá buscar na referência funcionário onde não há nenhum método autentica. Mas então porque funciona no método getBonificacao() durante a aula? É porque já existe um método getBonificacao() na classe funcionario? Só por isso? Por existir um método com o mesmo nome na classe mãe aí o compilador busca pelo mesmo método sob-escrito nas classes filhas?

2 respostas
solução!

Olá João, isso mesmo

Então no exemplo que você citou da aula, acredito que foi o :

public void registra( Funcionario f ){
    f.getBonificacao();
}

O compilador tem uma garantia que todas as classes que façam a extensão de Funcionario tem esse método, seja por:

  • Sobreescrita utilizando o @Override e neste caso será a implementação utilizada

  • Seja por não implementar nada, e neste caso será utilizado a implementação base da classe mãe

Então podemos dizer que não é só por existir um método com o mesmo nome, na verdade ele será o padrão, e quando fazemos a sobreescrita apenas dizemos que o comportamento será diferente na criação daquele objetos, então é como se tívessemos:

  • EVideo

    • nome
    • idade
    • salario
    • getBonificacao() -> salario + 1000
  • Supervisor ( não implementa nada)

    • nome
    • idade
    • salario
    • getBonificao () -> super.getBonificacao()

Então quando o código está rodando, não importa o tipo de funcionário, só precisamos executar a função getBonificao que todos tem, ainda que seja um super.getBonificacao() que é o default quando não implementado :)

Abraços e Bons Estudos!

Entendo, muito obrigado Geovani!!!=)