Sobes.tech
Junior — Middle

Czym różni się klasa abstrakcyjna od interfejsu w programowaniu obiektowym?

sobes.tech AI

Odpowiedź od AI

Klasa abstrakcyjna i interfejs w PHP mają następujące różnice:

  • Klasa abstrakcyjna może zawierać metody abstrakcyjne (bez implementacji), a także metody z implementacją i właściwości.

  • Interfejs zawiera tylko deklaracje metod (od PHP 8 można dodawać domyślne implementacje, ale to jest cecha), nie zawiera stanu (właściwości).

  • Klasa może dziedziczyć tylko po jednej klasie abstrakcyjnej, ale może implementować wiele interfejsów.

  • Klasa abstrakcyjna jest używana, gdy trzeba zdefiniować podstawową implementację i ogólny kontrakt, a interfejs — gdy trzeba zdefiniować tylko kontrakt bez implementacji.

Przykład:

abstract class Animal {
    abstract public function makeSound();
    public function sleep() {
        echo "Śpi";
    }
}

interface CanFly {
    public function fly();
}

class Bird extends Animal implements CanFly {
    public function makeSound() {
        echo "Ćwierk";
    }
    public function fly() {
        echo "Lata";
    }
}

W ten sposób klasa abstrakcyjna określa częściową implementację, a interfejs — tylko kontrakt.