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 "Лети";
    }
}

По този начин, абстрактният клас задава частична реализация, интерфейсът — само контракт.