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