13.5 Herança e Polimorfismo em Java: Hierarquia de Classes

A programação orientada a objetos (POO) é um paradigma de desenvolvimento de software que se baseia no conceito de "objetos", que podem conter dados na forma de campos, frequentemente conhecidos como atributos, e código, na forma de procedimentos, frequentemente conhecidos como métodos. Dois dos pilares fundamentais da POO são a herança e o polimorfismo, que permitem a criação de um código mais reutilizável e flexível.

Herança em Java

A herança é um mecanismo que permite que uma nova classe seja criada com base em uma classe existente. A nova classe, conhecida como subclasse ou classe derivada, herda campos e métodos da classe existente, que é chamada de superclasse ou classe base. A herança é uma forma de reutilizar código e estabelecer uma relação de tipo entre classes, criando uma hierarquia.

Em Java, a herança é realizada com a palavra-chave extends. Por exemplo:

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

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

Aqui, a classe Cachorro estende a classe Animal, o que significa que Cachorro herda o método comer() de Animal. Isso significa que um objeto de Cachorro pode chamar o método comer(), mesmo que não tenha sido explicitamente definido na classe Cachorro.

Java suporta apenas herança simples, o que significa que uma classe só pode estender uma única classe. No entanto, uma classe pode implementar várias interfaces, que é um tópico diferente e também uma forma de alcançar a polimorfia.

Polimorfismo em Java

Polimorfismo é a capacidade de um método de ter várias formas. Em Java, isso é conseguido principalmente de duas maneiras: polimorfismo de sobrecarga (overloading) e polimorfismo de sobrescrita (overriding).

Polimorfismo de sobrecarga acontece quando dois ou mais métodos na mesma classe têm o mesmo nome, mas parâmetros diferentes. Por exemplo:

class Exemplo {
    void demo(int a) {
        System.out.println("a: " + a);
    }

    void demo(int a, int b) {
        System.out.println("a e b: " + a + "," + b);
    }

    double demo(double a) {
        System.out.println("double a: " + a);
        return a*a;
    }
}

Polimorfismo de sobrescrita, por outro lado, é quando uma subclasse tem um método com a mesma assinatura (nome e parâmetros) que um método na superclasse. Ao sobrescrever um método, a subclasse fornece sua própria implementação. Um exemplo disso seria:

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");
    }
}

Com o polimorfismo de sobrescrita, quando um método é invocado, o método da subclasse é chamado, não o da superclasse. O uso da anotação @Override é opcional, mas é uma boa prática de programação, pois ajuda a evitar erros e deixa o código mais legível.

Hierarquia de Classes

A hierarquia de classes é a organização de classes em uma estrutura de árvore onde a classe base é o nó raiz e as subclasses são os nós filhos. Essa estrutura permite a reutilização de código e a gestão da complexidade em sistemas grandes. Em uma hierarquia de classes, uma subclasse herda o estado e o comportamento da superclasse, podendo adicionar novos campos e métodos ou sobrescrever os existentes.

Um exemplo clássico de hierarquia de classes é a classificação biológica. Por exemplo, a classe Mamifero pode estender a classe Animal, e a classe Cachorro pode estender a classe Mamifero. Cada nível da hierarquia agrega características específicas que são herdadas pelos níveis abaixo.

Considerações Finais

A herança e o polimorfismo são conceitos essenciais no desenvolvimento orientado a objetos. Eles permitem a criação de uma estrutura de código que é ao mesmo tempo flexível e fácil de manter. A herança permite estabelecer uma relação "é-um" entre classes, enquanto o polimorfismo permite que objetos de diferentes classes sejam tratados de maneira uniforme. Juntos, eles proporcionam poderosas ferramentas para o desenvolvimento de software em Java e muitas outras linguagens de programação orientadas a objetos.

Entender e aplicar corretamente a herança e o polimorfismo pode ser desafiador para programadores iniciantes, mas é fundamental para a criação de sistemas robustos e escaláveis. Com a prática e o estudo desses conceitos, desenvolvedores podem dominar a arte da programação orientada a objetos e criar aplicações eficientes e de alta qualidade em Java.

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: Construtores e Herança

Próxima página do Ebook Gratuito:

90Herança e Polimorfismo em Java: Construtores e Herança

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