Middle
Ποια είναι η διαφορά μεταξύ μιας αφηρημένης κλάσης και ενός mixin;
sobes.tech AI
Απάντηση από AI
Αφηρημένη κλάση:
- Μπορεί να έχει κανονικές και αφηρημένες μεθόδους και πεδία.
- Δεν μπορεί να δημιουργηθεί άμεσα ένα στιγμιότυπο μιας αφηρημένης κλάσης.
- Μπορεί να περιέχει κατασκευαστές.
- Κληρονομείται με τη λέξη-κλειδί
extends. Υποστηρίζει απλή κληρονομία. - Χρησιμοποιείται για τον ορισμό κοινής συμπεριφοράς και δομής για τις υποκλάσεις.
Mixin:
- Μπορεί να περιέχει μεθόδους και πεδία, αλλά δεν μπορεί να ορίσει κατασκευαστές.
- Δεν προορίζεται για τη δημιουργία στιγμιοτύπων.
- Χρησιμοποιείται για την προσθήκη λειτουργικότητας σε κλάσεις που δεν ταιριάζουν στην ιεραρχία κληρονομιάς.
- Συνδυάζεται με μια κλάση με τη λέξη-κλειδί
with. Μια κλάση μπορεί να χρησιμοποιεί πολλά mixins.
| Χαρακτηριστικό | Αφηρημένη κλάση | Mixin |
|---|---|---|
| Στιγμιότυπο | Δεν μπορεί να δημιουργηθεί άμεσα | Δεν μπορεί να δημιουργηθεί |
| Κατασκευαστές | Μπορεί να έχει | Δεν μπορεί να έχει |
| Κληρονομιά | extends (μοναδική) |
with (πολλαπλή) |
| Κύριος σκοπός | Ορισμός ιεραρχίας | Προσθήκη συμπεριφοράς |
Παράδειγμα χρήσης αφηρημένης κλάσης:
abstract class LivingBeing {
void breathe(); // Αφηρημένη μέθοδος
void grow() { // Κανονική μέθοδος
print('Αυξάνεται...');
}
}
class Human extends LivingBeing {
@override
void breathe() {
print('Αναπνοή με πνεύμονες');
}
}
Παράδειγμα χρήσης mixin:
mixin Walkable {
void walk() {
print('Περπάτημα...');
}
}
mixin Swimmable {
void swim() {
print('Κολύμπι...');
}
}
class Dog with Walkable, Swimmable {
// Η κλάση Dog έχει τώρα τις μεθόδους walk() και swim()
}