Programação Orientada a Objetos: Polimorfismo
Se você está mergulhando no universo da Programação Orientada a Objetos (POO), provavelmente já ouviu falar de um conceito poderoso e, às vezes, um pouco intimidador: o Polimorfismo. Mas o que exatamente significa essa palavra que parece complicada?
A resposta está em sua origem: "poli" (muitas) e "morfismo" (formas). Em essência, polimorfismo é a capacidade de um objeto assumir muitas formas, ou melhor, de uma mesma ação se comportar de maneiras diferentes dependendo do contexto.
Polimorfismo é um pilar da POO que permite a realização de uma mesma tarefa de diferentes maneiras, escrevendo um código mais flexível, genérico e fácil de manter.
As Duas Faces do Polimorfismo
1. Sobrecarga (Overload)
2. Sobreposição (Override)
Um Exemplo Prático: Formas Geométricas
Imagine que estamos criando um sistema para calcular a área de diferentes formas geométricas. Temos uma classe abstrata Forma e classes concretas como Circunferencia e Retangulo.
A classe Forma define um contrato: toda forma DEVE ter um método para calcular a área. No entanto, ela não sabe como fazer isso, pois o cálculo é diferente para cada forma.
// Superclasse Abstrata public abstract class Forma { // Método abstrato que força as subclasses a implementá-lo public abstract double area(); }
Agora, as classes filhas sobrepõem o método area() com suas próprias regras de cálculo:
// Subclasse Circunferencia public class Circunferencia extends Forma { private double raio; //... construtor @Override public double area() { return Math.PI * raio * raio; } } // Subclasse Retangulo public class Retangulo extends Forma { private double base, altura; //... construtor @Override public double area() { return base * altura; } }
A Mágica do Polimorfismo em Ação
O grande poder aparece quando usamos uma referência da superclasse (Forma) para apontar para objetos das subclasses. Podemos ter uma lista de Forma e chamar o método area() em cada item, sem nos preocuparmos com o tipo específico de cada um.
Forma minhaForma; minhaForma = new Circunferencia(10.0); // Chama o area() de Circunferencia System.out.println("Área: " + minhaForma.area()); minhaForma = new Retangulo(5.0, 4.0); // Chama o area() de Retangulo System.out.println("Área: " + minhaForma.area());
Referência
Java: Guia do Programador, Peter Jandl Junior, Ed 04, 2021

Comentários
Postar um comentário