Sobes.tech
Middle

Ποια είναι η διαφορά μεταξύ μιας αφηρημένης κλάσης και μιας διεπαφής;

sobes.tech AI

Απάντηση από AI

Αφηρημένη κλάση — είναι μια κλάση που μπορεί να περιέχει τόσο υλοποιημένες μεθόδους όσο και αφηρημένες (χωρίς υλοποίηση). Χρησιμεύει ως βάση για την κληρονομικότητα και μπορεί να περιέχει κατάσταση (πεδία).

Διεπαφή — είναι ένα συμβόλαιο που ορίζει ένα σύνολο μεθόδων χωρίς υλοποίηση (στην κλασική έννοια). Η κλάση που υλοποιεί τη διεπαφή πρέπει να υλοποιήσει όλες τις μεθόδους της.

Βασικές διαφορές:

  • Η αφηρημένη κλάση μπορεί να περιέχει υλοποίηση και κατάσταση, η διεπαφή — μόνο υπογραφές μεθόδων (σε ορισμένες γλώσσες, οι διεπαφές μπορούν να περιέχουν προεπιλεγμένες μεθόδους).
  • Μια κλάση μπορεί να κληρονομήσει μόνο από μία αφηρημένη κλάση, αλλά μπορεί να υλοποιήσει πολλές διεπαφές.
  • Η αφηρημένη κλάση παρέχει μερική υλοποίηση, η διεπαφή — μόνο το συμβόλαιο.

Παράδειγμα σε Java:

abstract class Animal {
    void eat() { System.out.println("Τρώει"); }
    abstract void sound();
}

interface Flyable {
    void fly();
}

class Bird extends Animal implements Flyable {
    void sound() { System.out.println("Τσιρίζω"); }
    public void fly() { System.out.println("Πετάω"); }
}