DEV Community

Emanoel Carvalho
Emanoel Carvalho

Posted on

Polimorfismo em Programação Orientada a Objetos

O que é Polimorfismo?

Polimorfismo é um dos pilares da Programação Orientada a Objetos (POO) que permite que objetos de diferentes classes possam ser tratados como objetos da mesma classe base. O termo "polimorfismo" vem do grego e significa "muitas formas". Em programação, isso se refere à capacidade de uma única interface (ou método) operar em diferentes tipos de objetos.

Existem dois tipos principais de polimorfismo:

  1. Polimorfismo em Tempo de Compilação (ou Sobrecarga): Ocorre quando dois ou mais métodos têm o mesmo nome, mas diferentes parâmetros (assinaturas).
  2. Polimorfismo em Tempo de Execução (ou Sobrescrita): Ocorre quando um método é redefinido em uma subclasse e pode ser chamado através de uma referência da superclasse.

Por que Usar Polimorfismo?

O polimorfismo é útil por várias razões:

  • Flexibilidade: Permite que o mesmo código funcione com diferentes tipos de objetos, promovendo a extensibilidade.
  • Reutilização de Código: Facilita o uso de interfaces e classes base, permitindo que novas classes sejam adicionadas sem modificar o código existente.
  • Melhoria na Manutenção: Torna o código mais fácil de entender e manter ao permitir que as classes compartilhem comportamentos comuns.

Exemplos de Polimorfismo em Java

1. Polimorfismo em Tempo de Execução (Sobrescrita de Métodos)

Vamos criar um exemplo onde temos uma classe base Animal e subclasses Cachorro e Gato. Cada subclasse implementa seu próprio método fazerSom.

// Superclasse
public class Animal {
    public void fazerSom() {
        System.out.println("O animal faz um som.");
    }
}

// Subclasse Cachorro
public class Cachorro extends Animal {
    @Override
    public void fazerSom() {
        System.out.println("O cachorro faz au au.");
    }
}

// Subclasse Gato
public class Gato extends Animal {
    @Override
    public void fazerSom() {
        System.out.println("O gato faz miau.");
    }
}
Enter fullscreen mode Exit fullscreen mode

Usando Polimorfismo em Tempo de Execução

public class Main {
    public static void main(String[] args) {
        Animal meuAnimal;

        // Polimorfismo: um objeto do tipo Cachorro tratado como Animal
        meuAnimal = new Cachorro();
        meuAnimal.fazerSom(); // Saída: O cachorro faz au au.

        // Polimorfismo: um objeto do tipo Gato tratado como Animal
        meuAnimal = new Gato();
        meuAnimal.fazerSom(); // Saída: O gato faz miau.
    }
}
Enter fullscreen mode Exit fullscreen mode

Saída Esperada:

O cachorro faz au au.
O gato faz miau.
Enter fullscreen mode Exit fullscreen mode

2. Polimorfismo em Tempo de Compilação (Sobrecarga de Métodos)

A sobrecarga de métodos permite que você tenha vários métodos com o mesmo nome, mas com diferentes parâmetros.

public class Calculadora {
    // Sobrecarga do método somar
    public int somar(int a, int b) {
        return a + b;
    }

    public double somar(double a, double b) {
        return a + b;
    }

    public int somar(int a, int b, int c) {
        return a + b + c;
    }
}
Enter fullscreen mode Exit fullscreen mode

Usando Polimorfismo em Tempo de Compilação

public class Main {
    public static void main(String[] args) {
        Calculadora calc = new Calculadora();

        // Chamando métodos sobrecarregados
        System.out.println("Soma de dois inteiros: " + calc.somar(5, 10));         // Saída: 15
        System.out.println("Soma de dois doubles: " + calc.somar(5.5, 10.5));     // Saída: 16.0
        System.out.println("Soma de três inteiros: " + calc.somar(5, 10, 15));    // Saída: 30
    }
}
Enter fullscreen mode Exit fullscreen mode

Saída Esperada:

Soma de dois inteiros: 15
Soma de dois doubles: 16.0
Soma de três inteiros: 30
Enter fullscreen mode Exit fullscreen mode

Considerações Finais

O polimorfismo é uma característica poderosa da Programação Orientada a Objetos que promove a flexibilidade, reutilização e manutenção do código. Ao permitir que diferentes classes sejam tratadas como uma classe base, o polimorfismo torna o código mais modular e extensível. O uso de sobrescrita de métodos e sobrecarga de métodos são técnicas fundamentais para implementar polimorfismo em Java e em outras linguagens orientadas a objetos.

Top comments (0)