Conceitos de Orientação a Objetos – Parte 5 de 6

Polimorfismo
Polimorfismo é uma palavra complicada para um conceito simples. Não se trata de um recurso a ser implementado. Se trata de uma propriedade da linguagem de programação. O conceito é simples. Imagine: Uma classe base Cliente é extendida pela classe herdeira ClienteVirtual. O cliente base possui todas as informações concernentes a ele: endereço, telefone, pontos obtidos pelas compras feitas, etc. Já a classe herdeira, ClienteVirtual, possui os dados específicos para os cliente que farão compras pelo website: nome do usuário, senha, e-mail, etc.
Você tem clientes que fazem as compras pessoalmente no balcão, e clientes que fazem as compras pela internet. Mas e se os clientes da internet resolverem fazer uma compra no cartão? VocÊ vai pedir a ele que lhe forneça nome do usuário e senha no balcão?
A situação parece absurda pela mera simplicidade da resolução. As duas classes são parecidas, mas são duas classes, dois tipos de dados diferentes. O polimorfismo é a propriedade que uma linguagem tem de entender que, por exemplo, um clienteVirtual não deixa de ser um cliente, ou seja, continua podendo ser aceito como um simples cliente. Quando se dirige ao Balcão, o ClienteVirtual pode apresentar todos os dados que recebeu por herança do cliente, independente do Usuário e senha, pois no balcão os únicos dados que importam são os dados do cliente base.
Pode parecer óbvio agora, mas o polimorfismo é muito útil, principalmente quando entra o uso das interfaces.