Back to questions
Junior — Middle
86
Как отличаются абстрактный класс от интерфейса в объектно-ориентированном программировании?
Answer from AI
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";
}
}
Таким образом, абстрактный класс задаёт частичную реализацию, интерфейс — только контракт.