Middle
Mik a különbségek az absztrakt osztály és a mixin között Dartban?
sobes.tech MI
Válasz az MI-től
Absztrakt osztály:
- Nem példányosítható közvetlenül.
- Tartalmazhat absztrakt (megvalósítatlan) és megvalósított módszereket.
- Az osztályokat az
extendskulcsszóval örökli az absztrakt osztály. - Egy osztály csak egy osztályból örökölhet (egyszerű öröklés).
Mixin:
- Nem példányosítható közvetlenül.
- Nem tartalmazhat konstruktort.
- Tartalmazhat megvalósított módszereket, de nem lehetnek absztraktak (Dart 2.1-ig, ahol megjelentek az absztrakt mixinek).
- Az osztályok a
withkulcsszóval használják a mixinek funkcionalitását. - Egy osztály több mixint is használhat.
- Kód újrahasznosítására és funkcionalitás hozzáadására szolgál osztályokhoz öröklés nélkül. Lényegében lehetővé teszi a viselkedések "keverését".
Absztrakt osztály példája:
abstract class Animal {
void makeSound(); // Absztrakt módszer
void eat() {
print('Evés...');
}
}
class Dog extends Animal {
@override
void makeSound() {
print('Vau!');
}
}
Mixin példája:
mixin CanJump {
void jump() {
print('Ugrás!');
}
}
class Cat with CanJump { }
Összehasonlítás táblázatban:
| Jellemző | Absztrakt osztály | Mixin |
|---|---|---|
| Példányosítás | Nem | Nem |
| Konstruktor | Lehet | Nem lehet |
| Absztrakt módszerek | Lehet | Nem lehet (Dart 2.1-ig) |
| Megvalósított módszerek | Lehet | Lehet |
| Használat | extends |
with |
| Öröklés/használat | Egyszerű öröklés | Többszörös használat |
| Cél | Általános szerződés meghatározása | Kód újrahasznosítás, viselkedés hozzáadása |