Sobes.tech
Junior — Middle

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

sobes.tech AI

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

Η αφηρημένη κλάση και η διεπαφή σε PHP έχουν τις ακόλουθες διαφορές:

  • Αφηρημένη κλάση μπορεί να περιέχει αφηρημένες μεθόδους (χωρίς υλοποίηση), καθώς και μεθόδους με υλοποίηση και ιδιότητες.

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

  • Μια κλάση μπορεί να κληρονομήσει μόνο από μια αφηρημένη κλάση, αλλά μπορεί να υλοποιεί πολλές διεπαφές.

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

Παράδειγμα:

abstract class Animal {
    abstract public function makeSound();
    public function sleep() {
        echo "Κοιμάται";
    }
}

interface CanFly {
    public function fly();
}

class Bird extends Animal implements CanFly {
    public function makeSound() {
        echo "Τσιρίζω";
    }
    public function fly() {
        echo "Πετάει";
    }
}

Έτσι, η αφηρημένη κλάση ορίζει μια μερική υλοποίηση, και η διεπαφή μόνο τη σύμβαση.