13.7 Herança e Polimorfismo em Java: Classes Abstratas

A programação orientada a objetos (POO) é um paradigma de programação que usa "objetos" para modelar dados e comportamentos. Java, sendo uma linguagem orientada a objetos, suporta plenamente conceitos como herança e polimorfismo, que são fundamentais para reutilizar código e melhorar a manutenção de sistemas complexos. Neste capítulo, vamos explorar o conceito de herança e polimorfismo em Java, com foco especial em classes abstratas.

Herança em Java

Herança é um mecanismo pelo qual uma nova classe, chamada subclasse, pode herdar propriedades e métodos de outra classe, chamada superclasse. A subclasse pode adicionar novos campos e métodos ou sobrescrever os métodos herdados. A principal vantagem da herança é a capacidade de reutilizar o código existente, o que torna o software mais fácil de desenvolver e manter.

Em Java, a herança é realizada usando 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.");
    }
}

A classe Cachorro herda o método comer() da classe Animal, mas também define seu próprio método, latir().

Polimorfismo em Java

Polimorfismo é a capacidade de um objeto ser referenciado de várias formas. Em Java, isso é principalmente alcançado através do uso de herança e interfaces. Polimorfismo permite que objetos de diferentes subclasses sejam tratados como objetos de uma superclasse. Isso é útil em muitos cenários, como quando queremos escrever código que pode trabalhar com objetos de diferentes classes sem saber exatamente de que classe eles são.

Por exemplo, podemos ter um método que aceita um objeto da classe Animal e chama o método comer() nele. Esse método funcionará com qualquer objeto que seja uma instância de Animal ou de qualquer subclasse de Animal, como Cachorro, sem necessidade de saber o tipo exato do objeto.

Classes Abstratas em Java

Classes abstratas são classes que não podem ser instanciadas por si só e são projetadas para serem subclasses. Elas são declaradas com a palavra-chave abstract. Classes abstratas são frequentemente usadas para criar uma classe base com métodos e propriedades comuns que serão compartilhados por todas as subclasses, mas deixando a implementação de um ou mais métodos para as subclasses.

Por exemplo:


abstract class Forma {
    int x, y;

    void mover(int dx, int dy) {
        x += dx;
        y += dy;
    }

    abstract void desenhar();
    abstract double area();
}

class Circulo extends Forma {
    double raio;

    void desenhar() {
        System.out.println("Desenhar círculo.");
    }

    double area() {
        return Math.PI * raio * raio;
    }
}

A classe Forma é abstrata e não pode ser instanciada diretamente. Ela define um método concreto, mover(), e dois métodos abstratos, desenhar() e area(), que devem ser implementados pelas subclasses. A classe Circulo é uma subclasse concreta de Forma e fornece implementações para os métodos abstratos.

Benefícios das Classes Abstratas

As classes abstratas são muito úteis quando queremos definir um template para um grupo de subclasses. Com classes abstratas, podemos:

  • Definir métodos que devem ser implementados pelas subclasses, garantindo uma interface consistente.
  • Implementar métodos não abstratos que podem ser compartilhados ou reutilizados pelas subclasses.
  • Definir campos de dados que podem ser usados pelas subclasses.
  • Controlar como os objetos das subclasses devem ser criados, usando construtores na classe abstrata.

Classes abstratas são uma ferramenta poderosa no arsenal de um desenvolvedor Java. Elas fornecem uma maneira de estabelecer uma relação clara entre classes relacionadas, enquanto ainda se aproveita dos benefícios da herança e do polimorfismo. Ao usar classes abstratas, podemos criar sistemas mais flexíveis e fáceis de manter, o que é uma vantagem significativa em projetos de software de qualquer tamanho.

Em resumo, herança e polimorfismo são conceitos fundamentais em Java que nos permitem escrever código reutilizável e sistemas mais flexíveis. As classes abstratas desempenham um papel crucial nisso, permitindo que definamos estruturas de classes que são ao mesmo tempo robustas e extensíveis. Ao dominar esses conceitos, os desenvolvedores Java podem criar aplicações poderosas e eficientes que são fáceis de manter e expandir ao longo do tempo.

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

Qual das seguintes afirmações sobre classes abstratas em Java é 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: Conceito de Polimorfismo

Próxima página do Ebook Gratuito:

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

5 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