Ответ
Наследование — это механизм ООП, который позволяет создавать новый класс (дочерний, производный) на основе уже существующего класса (родительского, базового). Дочерний класс автоматически получает (наследует) все публичные и защищённые свойства и методы родительского класса, а также может:
- Добавлять новые свойства и методы.
- Переопределять унаследованные методы, изменяя их поведение.
Основная цель: повторное использование кода (DRY — Don't Repeat Yourself) и создание иерархии классов, отражающей логические отношения "является" (is-a).
Пример на PHP:
// Базовый (родительский) класс
class Vehicle {
protected string $brand;
public function __construct(string $brand) {
$this->brand = $brand;
}
public function startEngine(): string {
return "Двигатель транспортного средства {$this->brand} запущен.";
}
}
// Дочерний класс. Car *является* Vehicle.
class Car extends Vehicle {
private bool $isConvertible = false;
// Переопределение метода родителя
public function startEngine(): string {
return "Автомобиль {$this->brand} завёлся с характерным рычанием!";
}
// Новый метод, специфичный для Car
public function openRoof(): void {
if ($this->isConvertible) {
echo "Крыша открыта!";
}
}
}
// Другой дочерний класс
class Bicycle extends Vehicle {
// Переопределение с вызовом родительской логики и дополнением
public function startEngine(): string {
// У велосипеда нет двигателя, поэтому базовое поведение не подходит.
return "У велосипеда {$this->brand} нет двигателя. Крутите педали!";
}
}
// Использование
$myCar = new Car('Toyota');
echo $myCar->startEngine(); // "Автомобиль Toyota завёлся с характерным рычанием!"
$myBike = new Bicycle('Stels');
echo $myBike->startEngine(); // "У велосипеда Stels нет двигателя. Крутите педали!"
Важные нюансы в PHP:
- Поддерживается одиночное наследование (класс может наследовать только от одного родителя).
- Для обращения к методу родительского класса из переопределённого метода используется ключевое слово
parent::(например,parent::startEngine()). - Модификатор доступа
privateв родительском классе означает, что свойство или метод не наследуются и не видны в дочернем классе. - Класс, объявленный как
final, не может быть унаследован.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶