Como na imagem abaixo eu troquei a referencia pra uma genérica como "funcionário" mas enquadrei como gerente , só que os métodos expecificos de gerente não compilam
x ss
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Como na imagem abaixo eu troquei a referencia pra uma genérica como "funcionário" mas enquadrei como gerente , só que os métodos expecificos de gerente não compilam
x ss
Olá Rodrigo, tudo bem?
O polimorfismo em permite que um objeto de uma classe específica seja tratado como um objeto de uma classe mais genérica, ou seja, uma classe pai. Isso é útil quando você tem vários objetos que compartilham características semelhantes, mas que têm comportamentos específicos diferentes.
No seu exemplo, você criou um objeto do tipo Gerente e atribuiu-o a uma variável do tipo Funcionario, que é uma classe pai. Isso funciona porque um objeto Gerente também é um objeto Funcionario, já que a classe Gerente herda da classe Funcionario. No entanto, se você tentar chamar um método específico do Gerente na referência do Funcionario, o compilador não vai permitir porque ele só sabe que está trabalhando com um objeto Funcionario, que não tem o método específico do Gerente.
Para resolver esse problema, você pode usar o downcasting, que é a conversão da referência genérica de volta para a referência específica. Por exemplo, se você quiser chamar o método getBonificacao() específico do Gerente:
Funcionario f = new Gerente();
double bonificacao = ((Gerente) f).getBonificacao();O operador (Gerente) é usado para fazer a conversão da referência genérica f para a referência específica Gerente. Depois disso, você pode chamar o método getBonificacao() normalmente.