Sobes.tech
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()
}