Middle
Kuo skiriasi abstrakti klasė ir miksinas Dart?
sobes.tech AI
Atsakymas iš AI
Abstract class:
- Negali būti tiesiogiai instancijuojamas.
- Gali turėti abstrakčius metodus (be įgyvendinimo) ir įgyvendintus metodus.
- Klasės paveldi iš abstrakčios klasės naudodamos raktinį žodį
extends. - Klasė gali paveldėti tik iš vienos klasės (viengubo paveldėjimo).
Miksinas:
- Negali būti tiesiogiai instancijuojamas.
- Negali turėti konstruktorių.
- Gali turėti įgyvendintus metodus, bet negali turėti abstrakčių metodų (iki Dart 2.1, kai pasirodė abstraktūs miksinai).
- Klasės naudoja miksinų funkcionalumą su
withraktiniu žodžiu. - Klasė gali naudoti kelis miksinus.
- Naudojamas kodo pakartotiniam naudojimui ir funkcionalumo pridėjimui prie klasių be paveldėjimo. Iš esmės leidžia "pridėti" elgseną.
Abstraktaus klaso pavyzdys:
abstract class Animal {
void makeSound(); // Abstraktus metodas
void eat() {
print('Valgymas...');
}
}
class Dog extends Animal {
@override
void makeSound() {
print('Au!');
}
}
Miksino pavyzdys:
mixin CanJump {
void jump() {
print('Šokinėjimas!');
}
}
class Cat with CanJump { }
Lentelės forma palyginimas:
| Savybė | Abstrakti klasė | Miksinas |
|---|---|---|
| Instancijavimas | Ne | Ne |
| Konstruktorius | Gali turėti | Negali turėti |
| Abstraktūs metodai | Gali turėti | Negali turėti (iki Dart 2.1) |
| Įgyvendinti metodai | Gali turėti | Gali turėti |
| Naudojimas | extends |
with |
| Paveldėjimas/Naudojimas | Viengubo paveldėjimo | Daugkartinis naudojimas |
| Paskirtis | Bendro kontrakto apibrėžimas | Kodo pakartotinis naudojimas, elgsenos pridėjimas |