Middle
Care sunt diferențele dintre o clasă abstractă și un mixin în Dart?
sobes.tech AI
Răspuns de la AI
Clasă abstractă:
- Nu poate fi instanțiată direct.
- Poate conține metode abstracte (fără implementare) și metode implementate.
- Clasele moștenesc de la o clasă abstractă folosind cuvântul cheie
extends. - O clasă poate moșteni doar de la o singură clasă (moștenire simplă).
Mixin:
- Nu poate fi instanțiat direct.
- Nu poate avea constructori.
- Poate conține metode implementate, dar nu poate avea metode abstracte (până la Dart 2.1, unde au apărut mixin-urile abstracte).
- Clasele folosesc funcționalitatea mixin-urilor cu cuvântul cheie
with. - O clasă poate folosi mai multe mixin-uri.
- Se folosește pentru reutilizarea codului și adăugarea de funcționalități claselor fără moștenire. În esență, permite "amestecarea" comportamentelor.
Exemplu de clasă abstractă:
abstract class Animal {
void makeSound(); // Metodă abstractă
void eat() {
print('Mănâncă...');
}
}
class Dog extends Animal {
@override
void makeSound() {
print('Ham!');
}
}
Exemplu de mixin:
mixin CanJump {
void jump() {
print('Salt!');
}
}
class Cat with CanJump { }
Comparativ în formă de tabel:
| Caracteristică | Clasă abstractă | Mixin |
|---|---|---|
| Instanțiere | Nu | Nu |
| Constructor | Poate avea | Nu poate avea |
| Metode abstracte | Poate avea | Nu poate avea (până la Dart 2.1) |
| Metode implementate | Poate avea | Poate avea |
| Utilizare | extends |
with |
| Moștenire/Utilizare | Moștenire simplă | Utilizare multiplă |
| Scop | Definirea unui contract general | Reutilizarea codului, adăugarea de comportament |