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

Métodos da classe mãe ou da classe filha?

Olá, eu li os tópicos anteriores, mas ainda tenho uma dúvida: Supondo que eu crio um objeto da classe filha mas o declaro com a referência da classe mãe (ex.: Funcionario f = new Gerente (); ). Por que uma referência da classe mãe roda um método da classe filha (que existe com mesmo nome e argumentos na classe mãe, mas com conteúdos diferentes) e ao mesmo tempo não roda um método exclusivo da classe filha?? Esse comportamento me parece um pouco incoerente. Eu tô deixando passar alguma coisa?

Não sei se ficou clara a pergunta, mas ao declarar f como Funcionário, não compilava f.autentica(###) porque autentica é um método de Gerente e ao mesmo tempo o getBonificação resultava a bonificação do gerente mesmo o argumento passado à outra classe sendo tipo Funcionario.

Obrigado, de antemão.

2 respostas
solução!

Oie Fabio, tudo bem contigo?

Seus comentários estão todos corretos, e por mais que pareça estranho ou confuso é dessa maneira que o Java foi definido. E se pararmos para pensar, até que faz sentido, é a referência quem guia quais métodos poderão ser chamados, por isso quando usamos uma referência mais genérica como "Funcionário" para instanciar uma classe específica como "Gerente", você só irá conseguir usar dessa instância os métodos e atributos que foram herdados de "Funcionário", você poderá até mesmo usar aqueles que tenham sido sobrescritos na classe "Gerente", pois eles vieram de "Funcionário".

Então por exemplo, antes da JVM rodar o método "getBonificacao" dessa instância, ela primeiro dá uma olhada para ver se esse método foi sobrescrito na classe filha "Gerente" antes de verificar a super classe "Funcionario", e aí como foi sobrescrito ela puxa essa implementação e não da super classe. Mas detalhe, ela só conseguiu ver esse método, pois ele é herança de "Funcionario", o resto dos métodos específicos ele não consegue enxergar, pois uma referência genérica não consegue acessar os métodos da classe específica.

Ficou mais claro?

Se ainda estiver com dúvida estarei por aqui :)

Ficou sim! obrigado.