Sobes.tech
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');
  }
}