4.11. Sintaxe Básica de Java: Polimorfismo

Polimorfismo é um dos quatro pilares fundamentais da Programação Orientada a Objetos (POO), juntamente com encapsulamento, herança e abstração. Em Java, o polimorfismo permite que um objeto seja referenciado de várias formas, o que é crucial para a reutilização de código e para a criação de sistemas flexíveis e extensíveis. Neste capítulo, vamos explorar o conceito de polimorfismo, como ele se manifesta em Java e como você pode utilizá-lo para melhorar seus programas.

O que é Polimorfismo?

Polimorfismo, do grego "polys" (muitos) e "morphē" (forma), refere-se à capacidade de um método, objeto ou variável serem representados de várias formas. No contexto de Java, isso geralmente significa que uma referência de uma classe pai pode apontar para um objeto de uma classe filha, permitindo que métodos sejam invocados de maneira que a implementação específica do método seja determinada em tempo de execução (polimorfismo de tempo de execução).

Tipos de Polimorfismo em Java

Existem dois tipos principais de polimorfismo em Java:

  • Polimorfismo de Compilação (ou Estático): Também conhecido como sobrecarga de métodos (method overloading), ocorre quando dois ou mais métodos na mesma classe têm o mesmo nome, mas parâmetros diferentes. A decisão sobre qual método será chamado é feita em tempo de compilação.
  • Polimorfismo de Tempo de Execução (ou Dinâmico): Também conhecido como sobrescrita de métodos (method overriding), ocorre quando uma classe filha fornece uma implementação específica de um método que já é fornecido por sua classe pai ou interface. A decisão sobre qual implementação de método será executada é feita em tempo de execução.

Polimorfismo de Tempo de Execução

Para entender melhor o polimorfismo de tempo de execução, considere o seguinte exemplo:


class Animal {
    void falar() {
        System.out.println("O animal faz um som");
    }
}

class Cachorro extends Animal {
    void falar() {
        System.out.println("O cachorro late: Woof!");
    }
}

class Gato extends Animal {
    void falar() {
        System.out.println("O gato mia: Meow!");
    }
}

public class TestePolimorfismo {
    public static void main(String[] args) {
        Animal meuAnimal = new Animal();
        Animal meuCachorro = new Cachorro();
        Animal meuGato = new Gato();

        meuAnimal.falar();
        meuCachorro.falar();
        meuGato.falar();
    }
}

Neste exemplo, a classe Animal tem um método falar(), que é sobrescrito pelas classes Cachorro e Gato. No método main, criamos três referências de tipo Animal, mas duas delas apontam para objetos de subclasses específicas. Quando o método falar() é invocado nas referências meuCachorro e meuGato, as implementações específicas de Cachorro e Gato são chamadas, respectivamente. Isso demonstra polimorfismo de tempo de execução.

Benefícios do Polimorfismo

O polimorfismo oferece vários benefícios, incluindo:

  • Flexibilidade: Permite que programas chamem métodos que não sabem necessariamente como são implementados no momento da compilação.
  • Reutilização de código: Com polimorfismo, é possível escrever código que funciona com classes que ainda não foram criadas.
  • Manutenibilidade: O polimorfismo ajuda a criar código que é mais fácil de entender e manter.

Interfaces e Polimorfismo

Interfaces em Java são outro mecanismo que promove polimorfismo. Uma interface é um contrato que especifica quais métodos uma classe deve implementar, sem fornecer a implementação em si. Quando uma classe implementa uma interface, qualquer referência de tipo dessa interface pode apontar para um objeto dessa classe.


interface Animal {
    void falar();
}

class Cachorro implements Animal {
    public void falar() {
        System.out.println("O cachorro late: Woof!");
    }
}

class Gato implements Animal {
    public void falar() {
        System.out.println("O gato mia: Meow!");
    }
}

public class TesteInterfacePolimorfismo {
    public static void main(String[] args) {
        Animal meuCachorro = new Cachorro();
        Animal meuGato = new Gato();

        meuCachorro.falar();
        meuGato.falar();
    }
}

Neste exemplo, a interface Animal define um método falar() que deve ser implementado por qualquer classe que a implemente. As classes Cachorro e Gato fornecem suas próprias implementações do método falar(). No método main, as referências de tipo Animal são usadas para invocar o método falar() em objetos de Cachorro e Gato, demonstrando polimorfismo.

Considerações Finais

Polimorfismo é uma ferramenta poderosa na programação Java, permitindo que você escreva código que é ao mesmo tempo geral e específico. É fundamental para a criação de aplicações robustas e flexíveis. Ao entender e aplicar corretamente o polimorfismo, você pode aproveitar ao máximo o paradigma da orientação a objetos, criando sistemas que são fáceis de estender e manter ao longo do tempo.

Agora responda o exercício sobre o conteúdo:

_Qual dos seguintes é um exemplo de polimorfismo de tempo de execução em Java?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Imagem do artigo Sintaxe básica de Java: Interfaces

Próxima página do Ebook Gratuito:

16Sintaxe básica de Java: Interfaces

4 minutos

Ganhe seu Certificado deste Curso Gratuitamente! ao baixar o aplicativo Cursa e ler o ebook por lá. Disponível na Google Play ou App Store!

Disponível no Google Play Disponível no App Store

+ de 6,5 milhões
de alunos

Certificado Gratuito e
Válido em todo o Brasil

48 mil exercícios
gratuitos

4,8/5 classificação
nas lojas de apps

Cursos gratuitos em
vídeo, áudio e texto