Sobes.tech
Назад к вопросам
Junior — Middle
87

Как отличаются абстрактный класс от интерфейса в объектно-ориентированном программировании?

Ответ от нейросети

sobes.tech AI

Абстрактный класс и интерфейс в PHP имеют следующие отличия:

  • Абстрактный класс может содержать как абстрактные методы (без реализации), так и методы с реализацией, а также свойства.

  • Интерфейс содержит только объявления методов (начиная с PHP 8 можно добавлять реализации по умолчанию, но это особенность), не содержит состояния (свойств).

  • Класс может наследоваться только от одного абстрактного класса, но может реализовывать несколько интерфейсов.

  • Абстрактный класс используется, когда нужно задать базовую реализацию и общий контракт, а интерфейс — когда нужно определить только контракт без реализации.

Пример:

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

interface CanFly {
    public function fly();
}

class Bird extends Animal implements CanFly {
    public function makeSound() {
        echo "Chirp";
    }
    public function fly() {
        echo "Flying";
    }
}

Таким образом, абстрактный класс задаёт частичную реализацию, интерфейс — только контракт.