CriandoBits
Identifique-se Entrar Esqueceu a senha? Esqueci minha senha

Java - Polimorfismo

Por Benedito Silva Júnior - publicado em 18/07/2016


Na programação orientada a objetos, o polimorfismo permite que referências de tipos de classes mais abstratas representem o comportamento das classes concretas que referenciam. Assim, é possível tratar vários tipos de maneira homogênea (através da interface do tipo mais abstrato). O termo polimorfismo é originário do grego e significa "muitas formas" (poli = muitas, morphos = formas).

O polimorfismo é caracterizado quando duas ou mais classes distintas tem métodos de mesmo nome, de forma que uma função possa utilizar um objeto de qualquer uma das classes polimórficas, sem necessidade de tratar de forma diferenciada conforme a classe do objeto.

Uma das formas de implementar o polimorfismo é através de uma classe abstrata, cujos métodos são declarados mas não são definidos, e através de classes que herdam os métodos desta classe abstrata.

Veja:

public abstract class OperacaoMatematica { public abstract double calcular(double x, double y); }

Esta é uma classe abstrata que representa qualquer operação matemática. Podemos imaginar diversas operações que se encaixam na sua interface, como soma, subtração, multiplicação ou divisão, entre outras.

Note que, mesmo que a natureza do cálculo mude, a semântica do método calcular não muda, ou seja, ele sempre calculará o resultado da operação matemática que está sendo trabalhada. Definamos então, duas subclasses, Soma e Subtracao, que implementam a classe OperacaoMatematica:

public class Soma extends OperacaoMatematica { public double calcular(double x, double y) { return x + y; } } public class Sustracao extends OperacaoMatematica { public double calcular(double x, double y) { return x - y; } }

O seguinte trecho de código demonstra o uso do polimorfismo:

public class Contas { public static void mostrarCalculo(OperacaoMatematica operacao, double x, double y) { System.out.println("O resultado é: " + operacao.calcular(x, y)); } public static void main(String args[]) { //primeiro calculamos uma soma Contas.mostrarCalculo(new Soma(), 5, 5); // imprime o resultado é: 10 //depois uma subtração Contas.mostrarCalculo(new Subtracao(), 5, 5); // imprime o resultado é: 0 } }

Embora o método calcular tenha sido chamado duas vezes no interior de mostrarCalculo, os tipos (isto é, as classes das instâncias) utilizados como parâmetros eram diferentes. De fato, o comportamento de cada tipo era exatamente oposto.

É comum definir sobrecarga de métodos ou simplesmente sobrecarga como uma forma de polimorfismo (chamado de polimorfismo ad-hoc). Nesse caso, implementa-se métodos com um mesmo nome, mudando apenas a lista de parâmetros que ele recebe. 

 
Voltar a pagina anteriorVoltarSubir ao topo da páginaTopo