Sobes.tech
Middle

Aké sú rozdiely medzi abstraktnou triedou a mixinom v Dart?

sobes.tech AI

Odpoveď od AI

Abstraktna trieda:

  • Nemôže byť priamo inštancovaná.
  • Môže obsahovať abstraktné (bez implementácie) a implementované metódy.
  • Triedy dedičia od abstraktnej triedy pomocou kľúčového slova extends.
  • Trieda môže dediť iba od jednej triedy (jednoduché dedenie).

Mixin:

  • Nemôže byť priamo inštancovaný.
  • Nemôže mať konštruktory.
  • Môže obsahovať implementované metódy, ale nemôže mať abstraktné metódy (až do Dart 2.1, kde sa objavili abstraktné mixiny).
  • Triedy používajú funkčnosť mixinov pomocou kľúčového slova with.
  • Trieda môže používať viacero mixinov.
  • Používa sa na opätovné použitie kódu a pridanie funkčnosti k triedam bez dedičstva. V podstate umožňuje "miešanie" správania.

Príklad abstraktnej triedy:

abstract class Animal {
  void makeSound(); // Abstraktná metóda
  void eat() {
    print('Jedenie...');
  }
}

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

Príklad mixinu:

mixin CanJump {
  void jump() {
    print('Skáče!');
  }
}

class Cat with CanJump { }

Porovnanie v tabuľke:

Vlastnosť Abstraktná trieda Mixin
Inštancovanie Nie Nie
Konštruktor Môže mať Nemôže mať
Abstraktné metódy Môže mať Nemôže mať (až do Dart 2.1)
Implementované metódy Môže mať Môže mať
Použitie extends with
Dedičstvo/ Použitie Jednoduché dedenie Viacnásobné použitie
Účel Definovanie všeobecného kontraktu Opätovné použitie kódu, pridanie správania