Sobes.tech
Junior — Middle

Quelles sont les différences entre une classe abstraite et une interface en programmation orientée objet?

sobes.tech IA

Réponse de l'IA

Classe abstraite et interface sont deux façons de décrire des contrats et comportements en programmation orientée objet, mais avec des caractéristiques différentes :

  • Classe abstraite peut contenir des méthodes abstraites (sans implémentation), ainsi que des méthodes avec implémentation et des champs (état). Elle sert de classe de base dont on peut hériter.
  • Interface décrit uniquement les signatures des méthodes (contrat), ne contient pas d'état et généralement pas d'implémentation (bien que dans certains langages, des méthodes par défaut soient possibles).

Différences :

  • Une classe ne peut hériter que d'une seule classe abstraite, mais peut implémenter plusieurs interfaces.
  • La classe abstraite peut avoir des constructeurs, l'interface non.
  • La classe abstraite est utilisée lorsque vous souhaitez implémenter partiellement la fonctionnalité, l'interface lorsque vous souhaitez définir uniquement un contrat.

Exemple en Dart (Flutter) :

abstract class Animal {
  void eat(); // méthode abstraite
  void sleep() {
    print('Dormir'); // méthode avec implémentation
  }
}

// Interface en Dart — c'est une classe avec uniquement des méthodes abstraites
abstract class Flyable {
  void fly();
}

class Bird extends Animal implements Flyable {
  @override
  void eat() {
    print('L'oiseau mange');
  }

  @override
  void fly() {
    print('L'oiseau vole');
  }
}