13.8 Herança e Polimorfismo em Java: Conceito de Polimorfismo

O conceito de polimorfismo é um dos pilares fundamentais da programação orientada a objetos (POO), e Java, sendo uma linguagem que adota esse paradigma, oferece suporte completo a essa característica. O termo polimorfismo vem do grego "polys", que significa muitos, e "morphē", que significa forma. Em programação, isso se refere à capacidade de uma variável, função ou objeto de assumir várias formas.

Polimorfismo em Java

Em Java, o polimorfismo se manifesta principalmente de duas maneiras: polimorfismo de sobrecarga (overloading) e polimorfismo de substituição (overriding). O primeiro refere-se à capacidade de ter várias funções com o mesmo nome mas com diferentes listas de parâmetros dentro da mesma classe. O segundo, que é o foco deste texto, está relacionado com a herança e permite que uma classe filha forneça uma implementação específica de um método que já é fornecido por uma de suas classes pais ou superclasses.

Herança e Polimorfismo

A herança permite que uma nova classe, conhecida como subclasse, herde campos e métodos de outra classe, chamada de superclasse. O polimorfismo de substituição entra em jogo quando uma subclasse redefine um método da superclasse. Isso permite que a subclasse especialize ou modifique o comportamento do método herdado. Quando um objeto da subclasse é utilizado, o método redefinido é o que será chamado, mesmo que a referência seja do tipo da superclasse.

Exemplo de Polimorfismo


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

class Cachorro extends Animal {
    @Override
    void som() {
        System.out.println("O cachorro late");
    }
}

class Gato extends Animal {
    @Override
    void som() {
        System.out.println("O gato mia");
    }
}

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

        meuAnimal.som(); // Saída: O animal faz um som
        meuCachorro.som(); // Saída: O cachorro late
        meuGato.som(); // Saída: O gato mia
    }
}

No exemplo acima, a classe Animal possui um método som() que é redefinido (sobrescrito) nas classes Cachorro e Gato. Embora as referências meuCachorro e meuGato sejam do tipo Animal, os métodos chamados são aqueles das classes reais dos objetos, ou seja, Cachorro e Gato, respectivamente. Isso é polimorfismo em ação.

Benefícios do Polimorfismo

O polimorfismo traz diversos benefícios para o desenvolvimento de software, incluindo:

  • Flexibilidade: Permite escrever código que pode trabalhar com objetos de diferentes tipos e classes.
  • Reutilização de código: O mesmo código pode ser usado para interagir com objetos de diferentes classes que são derivadas de uma mesma superclasse.
  • Manutenibilidade: Facilita a manutenção e a atualização do código, uma vez que mudanças em uma superclasse podem ser automaticamente herdadas pelas subclasses.

Interfaces e Polimorfismo

Além da herança de classes, o polimorfismo em Java também pode ser alcançado através de interfaces. Uma interface define um contrato que as classes concretas devem seguir, especificando métodos que devem ser implementados. Uma vez que uma classe implementa uma interface, qualquer objeto dessa classe pode ser referenciado como sendo do tipo da interface. Isso permite que diferentes classes que implementam a mesma interface sejam tratadas de forma polimórfica.


interface Animal {
    void som();
}

class Cachorro implements Animal {
    @Override
    public void som() {
        System.out.println("O cachorro late");
    }
}

class Gato implements Animal {
    @Override
    public void som() {
        System.out.println("O gato mia");
    }
}

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

        meuCachorro.som(); // Saída: O cachorro late
        meuGato.som(); // Saída: O gato mia
    }
}

No exemplo acima, Animal é uma interface, e as classes Cachorro e Gato implementam essa interface. Isso permite que objetos de ambas as classes sejam referenciados como objetos do tipo Animal e que o código possa interagir com eles de maneira polimórfica.

Considerações Finais

O polimorfismo é um conceito poderoso que permite a construção de sistemas flexíveis e facilmente extensíveis. Em Java, a implementação de polimorfismo é direta e natural, graças ao seu suporte robusto à programação orientada a objetos. Compreender e aplicar corretamente o polimorfismo é essencial para qualquer desenvolvedor Java que deseje criar códigos reutilizáveis, manuteníveis e escaláveis.

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

Qual das seguintes afirmações melhor descreve o polimorfismo de substituição em Java, conforme explicado no texto?

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

Você errou! Tente novamente.

Imagem do artigo Herança e Polimorfismo em Java: Polimorfismo em tempo de execução (Runtime Polymorphism)

Próxima página do Ebook Gratuito:

93Herança e Polimorfismo em Java: Polimorfismo em tempo de execução (Runtime Polymorphism)

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