Sobes.tech
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
Мұрагерлік/Қолдану Біріншілік мұрагерлік Көп қолдану
Мақсат Жалпы келісімшартты анықтау Кодты қайта пайдалану, мінез-құлық қосу