Абстрактный класс может содержать как абстрактные (без реализации), так и конкретные (с реализацией) методы, а также свойства. Интерфейс содержит только объявления методов без реализации и не может иметь свойств.
Класс может наследовать только один абстрактный класс, но реализовывать несколько интерфейсов.
Абстрактный класс используется для определения базовой функциональности и структуры для группы связанных классов. Интерфейс определяет контракт (набор методов), который должны реализовать классы, его использующие, для обеспечения полиморфизма.
В абстрактном классе можно определить конструктор, в интерфейсе нет.
При наследовании от абстрактного класса дочерний класс должен реализовать все абстрактные методы родителя. При реализации интерфейса класс должен реализовать все методы, объявленные в интерфейсе.
php
Основные различия в таблице:
| Особенность | Абстрактный класс | Интерфейс |
|---|---|---|
| Методы | Абстрактные и конкретные | Только абстрактные |
| Свойства | Могут быть | Не могут быть |
| Наследование | Только один класс | Несколько интерфейсов |
| Конструктор | Может быть | Не может быть |
| Реализация | Частичная или полная | Полная (все методы) |
| Назначение | Общая функциональность | Контракт, полиморфизм |