Middle
Wat zijn de verschillen tussen een abstracte klasse en een mixin in Dart?
sobes.tech AI
Antwoord van AI
Abstracte klasse:
- Kan niet direct worden geïnstantieerd.
- Kan abstracte methoden (zonder implementatie) en geïmplementeerde methoden bevatten.
- Klassen erven van een abstracte klasse met het sleutelwoord
extends. - Een klasse kan slechts van één klasse erven (enkelvoudige overerving).
Mixin:
- Kan niet direct worden geïnstantieerd.
- Kan geen constructors hebben.
- Kan geïmplementeerde methoden bevatten, maar geen abstracte methoden (tot Dart 2.1, waar abstracte mixins verschenen).
- Klassen gebruiken de functionaliteit van mixins met het sleutelwoord
with. - Een klasse kan meerdere mixins gebruiken.
- Wordt gebruikt voor hergebruik van code en het toevoegen van functionaliteit aan klassen zonder overerving. In wezen maakt het "mengen" van gedrag mogelijk.
Voorbeeld van een abstracte klasse:
abstract class Animal {
void makeSound(); // Abstracte methode
void eat() {
print('Eten...');
}
}
class Dog extends Animal {
@override
void makeSound() {
print('Woef!');
}
}
Voorbeeld van een mixin:
mixin CanJump {
void jump() {
print('Springen!');
}
}
class Cat with CanJump { }
Vergelijking in tabelvorm:
| Kenmerk | Abstracte klasse | Mixin |
|---|---|---|
| Instantiering | Nee | Nee |
| Constructor | Kan hebben | Kan niet hebben |
| Abstracte methoden | Kan hebben | Kan niet hebben (tot Dart 2.1) |
| Geïmplementeerde methoden | Kan hebben | Kan hebben |
| Gebruik | extends |
with |
| Overerving/gebruik | Enkelvoudige overerving | Meervoudig gebruik |
| Doel | Definiëren van een algemene contract | Hergebruik van code, gedrag toevoegen |