Sobes.tech
Middle

Kuo skiriasi abstrakti klasė ir miksinas Dart?

sobes.tech AI

Atsakymas iš AI

Abstract class:

  • Negali būti tiesiogiai instancijuojamas.
  • Gali turėti abstrakčius metodus (be įgyvendinimo) ir įgyvendintus metodus.
  • Klasės paveldi iš abstrakčios klasės naudodamos raktinį žodį extends.
  • Klasė gali paveldėti tik iš vienos klasės (viengubo paveldėjimo).

Miksinas:

  • Negali būti tiesiogiai instancijuojamas.
  • Negali turėti konstruktorių.
  • Gali turėti įgyvendintus metodus, bet negali turėti abstrakčių metodų (iki Dart 2.1, kai pasirodė abstraktūs miksinai).
  • Klasės naudoja miksinų funkcionalumą su with raktiniu žodžiu.
  • Klasė gali naudoti kelis miksinus.
  • Naudojamas kodo pakartotiniam naudojimui ir funkcionalumo pridėjimui prie klasių be paveldėjimo. Iš esmės leidžia "pridėti" elgseną.

Abstraktaus klaso pavyzdys:

abstract class Animal {
  void makeSound(); // Abstraktus metodas
  void eat() {
    print('Valgymas...');
  }
}

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

Miksino pavyzdys:

mixin CanJump {
  void jump() {
    print('Šokinėjimas!');
  }
}

class Cat with CanJump { }

Lentelės forma palyginimas:

Savybė Abstrakti klasė Miksinas
Instancijavimas Ne Ne
Konstruktorius Gali turėti Negali turėti
Abstraktūs metodai Gali turėti Negali turėti (iki Dart 2.1)
Įgyvendinti metodai Gali turėti Gali turėti
Naudojimas extends with
Paveldėjimas/Naudojimas Viengubo paveldėjimo Daugkartinis naudojimas
Paskirtis Bendro kontrakto apibrėžimas Kodo pakartotinis naudojimas, elgsenos pridėjimas