O que são classes abstratas e interfaces em Java?

Classes abstratas e interfaces em Java são mecanismos para definir comportamentos genéricos, sendo fundamentais para a Programação Orientada a Objetos.

O que são classes abstratas e interfaces em Java?

Na Programação Orientada a Objetos, classes abstratas e interfaces são mecanismos que permitem definir contratos de comportamento para outras classes. Ambos são essenciais para garantir reutilização de código e flexibilidade na modelagem de sistemas.

1. O que são classes abstratas?

Uma classe abstrata é uma classe que não pode ser instanciada diretamente e pode conter métodos concretos (com implementação) e abstratos (sem implementação).

abstract class Animal {
    String nome;

    abstract void emitirSom(); // Método abstrato, precisa ser implementado pelas subclasses

    void dormir() {
        System.out.println(nome + " está dormindo.");
    }
}

Aqui, qualquer classe que herdar Animal deverá implementar emitirSom(), pois ele foi declarado como abstrato.

2. O que são interfaces?

Interfaces são contratos que definem um conjunto de métodos que uma classe deve implementar. Diferente de classes abstratas, uma interface não pode conter implementação de métodos (até o Java 7) e permite herança múltipla.

interface Voador {
    void voar(); // Método sem implementação
}

3. Diferença entre classes abstratas e interfaces

Característica Classe Abstrata Interface
Contém métodos concretos? Sim Não (até Java 7, depois pode conter métodos default)
Pode ter atributos? Sim (com qualquer modificador) Sim, mas apenas constantes (final e static)
Suporta herança múltipla? Não Sim (uma classe pode implementar várias interfaces)
Uso recomendado Quando há comportamento comum entre subclasses Quando há um contrato a ser seguido sem implementação padrão

4. Quando usar cada um?

  • Use classes abstratas quando precisar definir um comportamento padrão para as subclasses.
  • Use interfaces quando precisar garantir que diferentes classes implementem um mesmo conjunto de métodos sem definir implementação.

5. Exemplo combinando classes abstratas e interfaces

interface Nadador {
    void nadar();
}

abstract class Animal {
    String nome;

    abstract void emitirSom();
}

class Peixe extends Animal implements Nadador {
    void emitirSom() {
        System.out.println("Peixe não faz som");
    }

    public void nadar() {
        System.out.println("Peixe nadando...");
    }
}

Conclusão

Classes abstratas e interfaces são ferramentas essenciais na POO para estruturar código reutilizável e modular. Saber quando usá-las permite criar arquiteturas mais flexíveis e escaláveis.

Ao desenvolver sistemas complexos, é comum se deparar com a dúvida entre usar uma classe abstrata ou uma interface. O conceito de abstração na POO visa modelar entidades do mundo real de maneira flexível. Em frameworks como o Spring, interfaces são amplamente utilizadas para definir contratos de serviço, enquanto classes abstratas são usadas para oferecer implementações padrão. A decisão entre um e outro depende do design do software e da necessidade de compartilhamento de código entre classes.

Algumas aplicações:

  • Criação de hierarquias de classes bem definidas
  • Definição de contratos para serviços em aplicações Java
  • Implementação de padrões de projeto como Factory e Adapter
  • Modelagem de entidades com comportamentos comuns

Dicas para quem está começando

  • Use classes abstratas quando precisar definir comportamento padrão
  • Prefira interfaces para definir contratos sem implementação
  • Lembre-se de que uma classe pode implementar várias interfaces, mas só pode herdar uma classe abstrata
  • Com Java 8+, interfaces podem ter métodos default, facilitando implementação padrão
  • Pratique criando classes abstratas e interfaces para entender as diferenças na prática
Foto de Eduardo Martins
Contribuições de
Eduardo Martins

Especialista em aplicações Java corporativas e APIs robustas.

Mais sobre o autor
Compartilhe este tutorial: O que são classes abstratas e interfaces em Java

Compartilhe este tutorial

Continue aprendendo:

O que é POO Programação Orientada a Objetos em Java

A Programação Orientada a Objetos (POO) em Java é um paradigma baseado em classes e objetos, promovendo modularidade e reutilização de código.

Tutorial anterior

Quando usar uma classe abstrata e quando usar uma interface

Classes abstratas e interfaces em Java têm propósitos distintos e devem ser utilizadas de acordo com a necessidade de reutilização e implementação de contratos.

Próximo tutorial