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 |