Middle
Kādas ir atšķirības starp abstrakto klasi un miksinu Dart?
sobes.tech AI
Atbilde no AI
Abstrakts klase:
- Nav iespējams tieši instancēt.
- Var saturēt abstraktus metodes (bez realizācijas) un realizētās metodes.
- Klase manto no abstraktās klases, izmantojot atslēgas vārdu
extends. - Klase var manto tikai no viena klases (vienkāršā mantošana).
Miksins:
- Nav iespējams tieši instancēt.
- Nav iespējams tam pievienot konstruktorus.
- Var saturēt realizētās metodes, bet nevar saturēt abstraktas metodes (līdz Dart 2.1, kad parādījās abstraktie miksini).
- Klases izmanto miksinu funkcionalitāti ar
withatslēgas vārdu. - Klase var izmantot vairākus miksinus.
- To izmanto koda atkārtotai lietošanai un funkcionalitātes pievienošanai klasēm bez mantošanas. Pamatā tas ļauj "pievienot" uzvedību.
Abstrakta klases piemērs:
abstract class Animal {
void makeSound(); // Abstrakta metode
void eat() {
print('Ēšana...');
}
}
class Dog extends Animal {
@override
void makeSound() {
print('Vau!');
}
}
Miksina piemērs:
mixin CanJump {
void jump() {
print('Lēkšana!');
}
}
class Cat with CanJump { }
Salīdzinājums tabulas formā:
| Raksturlielums | Abstrakta klase | Miksins |
|---|---|---|
| Instancēšana | Nē | Nē |
| Konstruktors | Var būt | Nevar būt |
| Abstraktas metodes | Var būt | Nevar būt (līdz Dart 2.1) |
| Realizētas metodes | Var būt | Var būt |
| Lietošana | extends |
with |
| Mantošana/Izmantošana | Vienkārša mantošana | Daudzreizēja izmantošana |
| Mērķis | Kopēja līguma definēšana | Koda atkārtošana, uzvedības pievienošana |