Middle
Aké sú rozdiely medzi abstraktnou triedou a mixinom v Dart?
sobes.tech AI
Odpoveď od AI
Abstraktna trieda:
- Nemôže byť priamo inštancovaná.
- Môže obsahovať abstraktné (bez implementácie) a implementované metódy.
- Triedy dedičia od abstraktnej triedy pomocou kľúčového slova
extends. - Trieda môže dediť iba od jednej triedy (jednoduché dedenie).
Mixin:
- Nemôže byť priamo inštancovaný.
- Nemôže mať konštruktory.
- Môže obsahovať implementované metódy, ale nemôže mať abstraktné metódy (až do Dart 2.1, kde sa objavili abstraktné mixiny).
- Triedy používajú funkčnosť mixinov pomocou kľúčového slova
with. - Trieda môže používať viacero mixinov.
- Používa sa na opätovné použitie kódu a pridanie funkčnosti k triedam bez dedičstva. V podstate umožňuje "miešanie" správania.
Príklad abstraktnej triedy:
abstract class Animal {
void makeSound(); // Abstraktná metóda
void eat() {
print('Jedenie...');
}
}
class Dog extends Animal {
@override
void makeSound() {
print('Haf!');
}
}
Príklad mixinu:
mixin CanJump {
void jump() {
print('Skáče!');
}
}
class Cat with CanJump { }
Porovnanie v tabuľke:
| Vlastnosť | Abstraktná trieda | Mixin |
|---|---|---|
| Inštancovanie | Nie | Nie |
| Konštruktor | Môže mať | Nemôže mať |
| Abstraktné metódy | Môže mať | Nemôže mať (až do Dart 2.1) |
| Implementované metódy | Môže mať | Môže mať |
| Použitie | extends |
with |
| Dedičstvo/ Použitie | Jednoduché dedenie | Viacnásobné použitie |
| Účel | Definovanie všeobecného kontraktu | Opätovné použitie kódu, pridanie správania |