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.