Junior — Middle
Quelle est la différence entre une interface et une classe abstraite dans le contexte de la programmation orientée objet?
sobes.tech IA
Réponse de l'IA
L'interface et la classe abstraite sont deux façons de définir des abstractions en programmation orientée objet, mais elles ont des différences clés:
- Interface décrit un ensemble de méthodes que la classe doit implémenter, mais ne contient pas d'implémentation (bien que dans certains langages, il soit possible d'avoir des méthodes avec une implémentation par défaut). L'interface ne peut pas contenir d'état (variables d'instance).
- Classe abstraite peut contenir à la fois des méthodes abstraites (sans implémentation) et des méthodes avec implémentation. Elle peut également contenir des champs (état).
Exemple en Swift:
protocol Vehicle {
func startEngine()
}
class Car: Vehicle {
func startEngine() {
print("Moteur démarré")
}
}
// La classe abstraite en Swift est implémentée via une classe avec des méthodes à redéfinir
class Animal {
func makeSound() {
fatalError("Cette méthode doit être redéfinie")
}
}
class Dog: Animal {
override func makeSound() {
print("Wouf")
}
}
Ainsi, l'interface définit un contrat, et la classe abstraite peut fournir une implémentation partielle et stocker l'état.