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 |
| Мурас алуу/Колдонуу | Жалгыз мурас | Көптөгөн колдонуу |
| Максаты | Жалпы келишимди аныктоо | Кодду кайра колдонуу, жүрүм-турумду кошуу |