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:

  1. poli (muitos ou vários)

  2. 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