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 "Лети";
}
}
По този начин, абстрактният клас задава частична реализация, интерфейсът — само контракт.