Sobes.tech
Middle

Kādas ir atšķirības starp abstrakto klasi un miksinu Dart?

sobes.tech AI

Atbilde no AI

Abstrakts klase:

  • Nav iespējams tieši instancēt.
  • Var saturēt abstraktus metodes (bez realizācijas) un realizētās metodes.
  • Klase manto no abstraktās klases, izmantojot atslēgas vārdu extends.
  • Klase var manto tikai no viena klases (vienkāršā mantošana).

Miksins:

  • Nav iespējams tieši instancēt.
  • Nav iespējams tam pievienot konstruktorus.
  • Var saturēt realizētās metodes, bet nevar saturēt abstraktas metodes (līdz Dart 2.1, kad parādījās abstraktie miksini).
  • Klases izmanto miksinu funkcionalitāti ar with atslēgas vārdu.
  • Klase var izmantot vairākus miksinus.
  • To izmanto koda atkārtotai lietošanai un funkcionalitātes pievienošanai klasēm bez mantošanas. Pamatā tas ļauj "pievienot" uzvedību.

Abstrakta klases piemērs:

abstract class Animal {
  void makeSound(); // Abstrakta metode
  void eat() {
    print('Ēšana...');
  }
}

class Dog extends Animal {
  @override
  void makeSound() {
    print('Vau!');
  }
}

Miksina piemērs:

mixin CanJump {
  void jump() {
    print('Lēkšana!');
  }
}

class Cat with CanJump { }

Salīdzinājums tabulas formā:

Raksturlielums Abstrakta klase Miksins
Instancēšana
Konstruktors Var būt Nevar būt
Abstraktas metodes Var būt Nevar būt (līdz Dart 2.1)
Realizētas metodes Var būt Var būt
Lietošana extends with
Mantošana/Izmantošana Vienkārša mantošana Daudzreizēja izmantošana
Mērķis Kopēja līguma definēšana Koda atkārtošana, uzvedības pievienošana