Polimorfismo
Definição
Polimorfismo é um dos 4 pilares da POO e se refere a capacidade de um objeto assumir diferentes formas ou comportamentos em diferentes contextos.
A palavra polimorfismo tem origem na língua grega e é composta por 2 partes:
poli (muitos ou vários)
morphe (forma ou aparência)
O polimorfismo oferece vários benefícios:
Flexibilidade e reutilização de código: um mesmo código pode ser aplicado a diferentes tipos de objetos;
Abstração de detalhes de implementação: o código que utiliza polimorfismo não se preocupa com detalhes de implementação;
Facilidade de manutenção: o código é mais genérico e fracamente acoplado a tipos específicos, facilitando a sua manutenção;
Possibilidade de tratar objetos de forma uniforme: é possível tratar objetos diferentes de maneira uniforme se houver compartilhamento da mesma interface ou herança da mesma classe base;
Aprimoramento da legibilidade do código: o uso do polimorfismo pode levar a um código mais claro e legível;
Facilita a implementação de interfaces gráficas e frameworks: o uso do polimorfismo é especialmente útil em cenários de interfaces gráficas e frameworks.
Exemplo
Considerar a hierarquia de classes a seguir:

Um objeto do tipo ServidorPublico pode ser especializado em um objeto do tipo Estatutario, Comissionado ou Temporario em tempo de execução.
No exemplo acima, o objeto isabela (do tipo ServidorPublico) pode assumir formas "mais especializadas", como Comissionado e, posteriormente, Estatutario.
Visibilidade de Atributos e Métodos
No exemplo anterior, o objeto isabela (do tipo ServidorPublico) foi criada como sendo do tipo Estatutario.
Contudo, caso seja necessário acessar os atributos e os métodos específicos da classe Estatutario, será obrigatório o uso de casting de objetos.
Exemplo do exercício que será feito mais abaixo:
Operador instanceof
Este operador é utilizado para identificar se um determinado objeto pertence a uma hierarquia de classes.
Exemplo do exercício que será feito mais abaixo:
Casting de objetos
O casting de objetos ocorre quando se deseja associar um objeto da classe filho a uma declaração da classe pai.
Pai objeto = new Filho();
Esta conversão é automática desde que a classe Pai seja uma superclasse (direta ou indireta) de Filho ou seja uma interface implementada por Pai.

Algumas conversões legais
Pode-se utilizar uma versão mais especializada quando se precisa de um objeto de certo tipo. Neste caso, a conversão é automática.
No sentido inverso, quando for necessário fazer a conversão de volta ao tipo mais especializado, a conversão deverá ser explícita:
Casting de Tipos
O casting entre tipos primitivos permite converter o valor de um tipo para outro.
O Java converterá automaticamente um tipo de dados em outro (upcasting) sempre que houver garantia de não haver perda de informação.

Exercício
Criar a classe Appv2 que irá instanciar vários objetos do tipo ServidorPublico e irá definir o método verificartipoServidorPublico()
App_v2
Last updated