Middle
Quelles sont les différences entre une classe abstraite et un mixin en Dart?
sobes.tech IA
Réponse de l'IA
Classe abstraite:
- Ne peut pas être instanciée directement.
- Peut contenir des méthodes abstraites (sans implémentation) et des méthodes implémentées.
- Les classes héritent d'une classe abstraite en utilisant le mot-clé
extends. - Une classe ne peut hériter que d'une seule classe (héritage simple).
Mixin:
- Ne peut pas être instancié directement.
- Ne peut pas avoir de constructeurs.
- Peut contenir des méthodes implémentées, mais pas de méthodes abstraites (jusqu'à Dart 2.1, où les mixins abstraits sont apparus).
- Les classes utilisent la fonctionnalité des mixins avec le mot-clé
with. - Une classe peut utiliser plusieurs mixins.
- Utilisé pour réutiliser du code et ajouter des fonctionnalités aux classes sans héritage. En substance, cela permet de "mélanger" des comportements.
Exemple de classe abstraite:
abstract class Animal {
void makeSound(); // Méthode abstraite
void eat() {
print('Mangeant...');
}
}
class Dog extends Animal {
@override
void makeSound() {
print('Wouf!');
}
}
Exemple de mixin:
mixin CanJump {
void jump() {
print('Sautant!');
}
}
class Cat with CanJump { }
Comparaison sous forme de tableau:
| Caractéristique | Classe abstraite | Mixin |
|---|---|---|
| Instanciation | Non | Non |
| Constructeur | Peut en avoir | Ne peut pas en avoir |
| Méthodes abstraites | Peut en avoir | Ne peut pas en avoir (jusqu'à Dart 2.1) |
| Méthodes implémentées | Peut en avoir | Peut en avoir |
| Utilisation | extends |
with |
| Héritage/utilisation | Héritage simple | Utilisation multiple |
| Objectif | Définir un contrat général | Réutilisation de code, ajout de comportement |