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.
Quando usar classes abstratas e quando usar interfaces em Java?
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

Eduardo Martins
Especialista em aplicações Java corporativas e APIs robustas.
Mais sobre o autor