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