Sobes.tech
Middle

Koje su razlike između apstraktne klase i mixina u Dart-u?

sobes.tech АИ

Одговор од АИ

Apstraktna klasa:

  • Ne može biti instancirana direktno.
  • Može sadržavati apstraktne (bez implementacije) i implementirane metode.
  • Klase nasleđuju od apstraktne klase pomoću ključne reči extends.
  • Klasa može nasleđivati samo od jedne klase (jednostruko nasleđivanje).

Mix-in:

  • Ne može biti instanciran direktno.
  • Ne može imati konstruktore.
  • Može sadržavati implementirane metode, ali ne može imati apstraktne metode (do Dart 2.1, gde su se pojavili apstraktni mix-inovi).
  • Klase koriste funkcionalnost mix-inova pomoću ključne reči with.
  • Klasa može koristiti više mix-inova.
  • Koristi se za ponovno korišćenje koda i dodavanje funkcionalnosti klasama bez nasleđivanja. U suštini, omogućava "mešanje" ponašanja.

Primer apstraktne klase:

abstract class Animal {
  void makeSound(); // Apstraktna metoda
  void eat() {
    print('Jelo...');
  }
}

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

Primer mix-in-a:

mixin CanJump {
  void jump() {
    print('Skok!');
  }
}

class Cat with CanJump { }

Uporedjenje u tabeli:

Osobina Apstraktna klasa Mix-in
Instanciranje Ne Ne
Konstruktor Može imati Ne može imati
Apstraktne metode Može imati Ne može imati (do Dart 2.1)
Implementirane metode Može imati Može imati
Upotreba extends with
Nasleđivanje/Upotreba Jednolinijsko Višestruko
Svrha Definisanje opšteg ugovora Ponovno korišćenje koda, dodavanje ponašanja