Polimorfismo de Sobrecarga

A Sobrecarga e os Construtores

O polimorfismo de sobrecarga normalmente acontece sobre os métodos construtores, pois é comum para uma classe ter várias maneiras de instanciá-la.

A Listagem 3 ilustra um exemplo de polimorfismo de sobrecarga nos construtores da classe Pessoa. Observe que são declarados 3 construtores e todos eles têm o mesmo nome da classe. Entretanto, cada um deles recebe um número diferente de parâmetros.

Assim, durante a criação de objetos do tipo Pessoa em um método main, por exemplo, o construtor que será chamado irá depender da quantidade e parâmetros passados durante a invocação do comando new.

Listagem 3 - Polimorfismo de sobrecarga de construtores

A Sobrecarga e a Conversão

Conversão e sobrecarga frequentemente andam lado a lado.

A Conversão é a capacidade de um tipo ser convertido em outro tipo de maneira automática ou pela força bruta também chamada de coerção.

Veja o quadro abaixo sobre conversão de tipos primitivos.

Conversão de Tipos Primitivos

Java converte um tipo de dado em outro sempre que isso for apropriado.

As conversões ocorrem automaticamente quando há garantia de não haver perda de informação. As conversões automáticas são permitidas para tipos de maior precisão e para tipos de menor precisão.

Exemplos de Conversões Automáticas

São permitidas as conversões do tipo byte para o tipo short, de short para int, e assim sucessivamente, até chegar o tipo de maior precisão, que é o double.

Observe também algumas conversões permitidas baseadas nas variáveis criadas pelas letras no quadro “Algumas conversões legais”.

A conversão também pode fazer com que um método pareça como se fosse polimórfico. A conversão ocorre quando um argumento de um tipo é convertido para o tipo esperado, internamente. Por exemplo, suponha que a classe Maior, descrita anteriormente, tivesse apenas atributos e métodos para lidar com o tipo primitivo, conforme ilustra a Listagem 4.

Listagem 4 - Classe Maior com o método calcMaior para os tipos int e float

Agora, suponha que em uma aplicação (método main) usamos um objeto da classe Maior, mas, na chamada de seu método calcMaior, fossem passados, ao invés de valores do tipo float, valores do tipo int., conforme ilustra a Listagem 5.

Listagem 5 - Conversão automática de tipos primitivos

Observe que, apesar do método esperar parâmetros do tipo float, o compilador aceitou receber parâmetros do tipo int, e os converteu automaticamente para float dentro do método calcMaior da classe Maior apresentada na Listagem 5.

Nesse caso, parece um caso de polimorfismo de sobrecarga, mas, na verdade, o que acontece é uma conversão automática de tipos.

Versão 5.3 - Todos os Direitos reservados