13.2 Herança e Polimorfismo em Java: Palavra-chave 'extends'

A herança é um dos pilares fundamentais da programação orientada a objetos (OOP). Em Java, a herança permite que uma classe herde campos e métodos de outra classe, promovendo a reutilização de código e a criação de uma relação hierárquica entre as classes. A palavra-chave extends é usada para estabelecer essa relação de herança entre duas classes.

Conceito de Herança

Na herança, temos duas entidades principais: a classe pai (ou superclasse) e a classe filha (ou subclasse). A classe filha herda os atributos e comportamentos da classe pai, mas também pode definir seus próprios membros e comportamentos. Isso significa que a classe filha é uma especialização da classe pai, onde ela não apenas possui os traços da classe pai, mas também adiciona suas características únicas.

Usando a palavra-chave 'extends'

Para implementar a herança em Java, usamos a palavra-chave extends na declaração da classe filha. Vejamos um exemplo simples:


class Animal {
    void comer() {
        System.out.println("Este animal come");
    }
}

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

No exemplo acima, Cachorro é uma subclasse de Animal. Isso significa que Cachorro herda o método comer() de Animal e também define seu próprio método latir(). Um objeto da classe Cachorro pode chamar ambos os métodos.

Polimorfismo e Herança

Polimorfismo é outro conceito chave na OOP que está intimamente relacionado à herança. Significa "muitas formas" e permite que objetos sejam tratados como instâncias de suas classes pai ao invés de suas classes reais. Em Java, isso é possível graças à herança e ao fato de que uma variável de referência de superclasse pode apontar para um objeto de subclasse. Isso permite que métodos sejam chamados de forma polimórfica.

Por exemplo:


Animal meuAnimal = new Cachorro();
meuAnimal.comer(); // Chama o método da classe Animal
// meuAnimal.latir(); // Erro de compilação: o tipo Animal não possui o método latir

Aqui, a variável meuAnimal é do tipo Animal, mas aponta para uma instância de Cachorro. Isso permite que o método comer() seja chamado polimorficamente. No entanto, se tentarmos chamar latir() através de meuAnimal, receberemos um erro de compilação, pois o compilador só conhece os métodos definidos na classe Animal.

Sobrescrita de Métodos

Uma característica importante da herança em Java é a capacidade de sobrescrever métodos. Isso significa que uma subclasse pode fornecer sua própria implementação de um método que já está definido em sua superclasse. Para sobrescrever um método, a subclasse deve definir um método com a mesma assinatura que o método da superclasse.


class Gato extends Animal {
    @Override
    void comer() {
        System.out.println("O gato come peixe");
    }
}

No exemplo acima, a classe Gato sobrescreve o método comer() da classe Animal. A anotação @Override é opcional, mas é uma boa prática usá-la, pois ela informa ao compilador e aos desenvolvedores que o método é uma sobrescrita intencional.

Polimorfismo e Sobrescrita de Métodos

Quando um método é sobrescrito, o polimorfismo garante que a versão sobrescrita do método seja chamada quando o objeto é tratado como uma instância da superclasse. Isso é uma parte fundamental do que torna o polimorfismo tão poderoso em Java.


Animal meuGato = new Gato();
meuGato.comer(); // Chama o método sobrescrito da classe Gato

Neste caso, mesmo que meuGato seja do tipo Animal, o método comer() que é chamado é o da classe Gato, porque o objeto real é uma instância de Gato.

Considerações Finais

A herança e o polimorfismo são conceitos fundamentais que permitem que as classes Java sejam reutilizáveis, extensíveis e gerenciáveis. A palavra-chave extends é a porta de entrada para a herança, enquanto o polimorfismo permite que objetos de diferentes classes sejam tratados de maneira uniforme. Compreender esses conceitos é essencial para qualquer programador que deseja dominar Java e desenvolver sistemas robustos e flexíveis.

Além disso, é importante estar ciente das limitações e considerações ao usar herança, como o problema do "diamante" em heranças múltiplas (que Java resolve ao não permitir herança múltipla de classes) e a importância do encapsulamento para manter uma hierarquia de classes bem definida e segura.

Em resumo, a herança e o polimorfismo são ferramentas poderosas que, quando usadas corretamente, podem significativamente melhorar o design e a manutenção do software. A palavra-chave extends é apenas o começo de um vasto mundo de possibilidades que a programação orientada a objetos oferece.

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

Qual das seguintes afirmações sobre herança e polimorfismo em Java está correta?

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: Sobrescrita de Métodos (Method Overriding)

Próxima página do Ebook Gratuito:

87Herança e Polimorfismo em Java: Sobrescrita de Métodos (Method Overriding)

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