Sobes.tech
Middle

Mik a különbségek az absztrakt osztály és a mixin között Dartban?

sobes.tech MI

Válasz az MI-től

Absztrakt osztály:

  • Nem példányosítható közvetlenül.
  • Tartalmazhat absztrakt (megvalósítatlan) és megvalósított módszereket.
  • Az osztályokat az extends kulcsszóval örökli az absztrakt osztály.
  • Egy osztály csak egy osztályból örökölhet (egyszerű öröklés).

Mixin:

  • Nem példányosítható közvetlenül.
  • Nem tartalmazhat konstruktort.
  • Tartalmazhat megvalósított módszereket, de nem lehetnek absztraktak (Dart 2.1-ig, ahol megjelentek az absztrakt mixinek).
  • Az osztályok a with kulcsszóval használják a mixinek funkcionalitását.
  • Egy osztály több mixint is használhat.
  • Kód újrahasznosítására és funkcionalitás hozzáadására szolgál osztályokhoz öröklés nélkül. Lényegében lehetővé teszi a viselkedések "keverését".

Absztrakt osztály példája:

abstract class Animal {
  void makeSound(); // Absztrakt módszer
  void eat() {
    print('Evés...');
  }
}

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

Mixin példája:

mixin CanJump {
  void jump() {
    print('Ugrás!');
  }
}

class Cat with CanJump { }

Összehasonlítás táblázatban:

Jellemző Absztrakt osztály Mixin
Példányosítás Nem Nem
Konstruktor Lehet Nem lehet
Absztrakt módszerek Lehet Nem lehet (Dart 2.1-ig)
Megvalósított módszerek Lehet Lehet
Használat extends with
Öröklés/használat Egyszerű öröklés Többszörös használat
Cél Általános szerződés meghatározása Kód újrahasznosítás, viselkedés hozzáadása