Middle
Фарқиятҳои байни синфи абстрактӣ ва миксин дар Dart чӣҳоянд?
sobes.tech AI
Ҷавоб аз AI
Абстракт класс:
- Тікелей инстанцирленеуге болмайды.
- Абстракт әдістерді (іші жоқ) және жүзеге асырылған әдістерді қамтуы мүмкін.
- Кластар
extendsкілт сөзі арқылы абстракт классынан мұраға алады. - Бір класс тек бір классынан мұраға алады (біріктірілген мұрагерлік).
Миксин:
- Тікелей инстанцирлене алмайды.
- Конструкторлары болмауы мүмкін.
- Іші жүзеге асырылған әдістерді қамтуы мүмкін, бірақ абстракт әдістерді қамтымайды (Dart 2.1-ге дейін, мұнда абстракт миксиндер пайда болды).
- Кластар
withкілт сөзімен миксиндердің функционалдығын пайдаланады. - Бір класс бірнеше миксиндерді пайдалана алады.
- Кодты қайта пайдалану және кластарға функционалдылық қосу үшін пайдаланылады, мұрагерліксіз. Негізінде, ол мінез-құлықтарды "араластыру" мүмкіндігін береді.
Абстракт класс мысалы:
abstract class Animal {
void makeSound(); // Абстракт әдіс
void eat() {
print('Тамақтану...');
}
}
class Dog extends Animal {
@override
void makeSound() {
print('Гав!');
}
}
Миксин мысалы:
mixin CanJump {
void jump() {
print(' секіру!');
}
}
class Cat with CanJump { }
Кесте түрінде салыстыру:
| Ерекшелік | Абстракт класс | Миксин |
|---|---|---|
| Инстанцирлеу | Жоқ | Жоқ |
| Конструктор | Мүмкін | Мүмкін емес |
| Абстракт әдістер | Мүмкін | Мүмкін емес (Dart 2.1-ге дейін) |
| Іске асырылған әдістер | Мүмкін | Мүмкін |
| Қолдану | extends |
with |
| Мұрагерлік/Қолдану | Біріншілік мұрагерлік | Көп қолдану |
| Мақсат | Жалпы келісімшартты анықтау | Кодты қайта пайдалану, мінез-құлық қосу |