Junior — Middle
Quais são as diferenças entre uma classe abstrata e uma interface na programação orientada a objetos?
sobes.tech IA
Resposta da IA
Classe abstrata e interface são duas formas de descrever contratos e comportamentos na programação orientada a objetos, mas com características diferentes:
- Classe abstrata pode conter métodos abstratos (sem implementação), bem como métodos com implementação e campos (estado). Serve como classe base da qual se pode herdar.
- Interface descreve apenas as assinaturas dos métodos (contrato), não contém estado e geralmente não possui implementação (embora em algumas linguagens seja possível ter métodos padrão).
Diferenças:
- Uma classe pode herdar apenas de uma classe abstrata, mas pode implementar várias interfaces.
- A classe abstrata pode ter construtores, a interface não.
- A classe abstrata é usada quando se deseja implementar parcialmente a funcionalidade, a interface quando se quer definir apenas um contrato.
Exemplo em Dart (Flutter):
abstract class Animal {
void eat(); // método abstrato
void sleep() {
print('A dormir'); // método com implementação
}
}
// Interface em Dart — é uma classe com apenas métodos abstratos
abstract class Flyable {
void fly();
}
class Bird extends Animal implements Flyable {
@override
void eat() {
print('O pássaro está a comer');
}
@override
void fly() {
print('O pássaro está a voar');
}
}