Ответ
Наследование — это механизм ООП, который позволяет создавать новый класс (дочерний, производный) на основе уже существующего класса (родительского, базового). Дочерний класс автоматически получает (наследует) все публичные и защищённые свойства и методы родительского класса, а также может:
- Добавлять новые свойства и методы.
- Переопределять унаследованные методы, изменяя их поведение.
Основная цель: повторное использование кода (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, не может быть унаследован.
Видео-ответы
▶
Сильный Middle и всего лишь 2 года опыта?? Такое вообще бывает? / Техсобес Middle Python Developer
▶
Собеседование Laravel PHP backend разработчика middle-senior. Тренировка к собеседованию
▶
Тестовое интервью в Oracle на middle Java
▶
Парень стал программистом в 33 года, а в 36 уже крепкий миддл?? / Техсобес Middle Python Developer
▶
Джун был тимлидом, разрабатывал телеграм ботов и стал миддлом? / Техсобес Middle Python Developer
▶
Сеньор хочет стать миддлом??? / Техсобес Senior QA Auto на позицию Middle Python Developer
▶
Собеседование на позицию Backend Developer Python Middle #8
▶
Открытое собеседование на Go-разработчика | Тренировочные интервью
▶
Собеседование на позицию Backend Developer Python + FastAPI Middle #3
▶
#1 Cобеседование Middle Frontend разработчика
▶
Джун пишет tg-ботов и разбирается в ООП как никто другой? / Лайвкодинг / Техсобес Junior Python Dev
▶
Junior Python-инженер | Собеседование
▶
МОКОВОЕ ИНТЕРВЬЮ | Junior Python-разработчик | Solvery + MoscowPython
▶
Техническое собеседование с подписчиком на frontend intern/junior: JS, React, Next, HTML, CSS, REST
▶
Моковое собеседование на Junior Python-разработчика | Solvery & Moscow Python
▶
Моковое собеседование Angular | Junior Frontend-разработчик
▶
Программист в 13 лет? / Техсобес на позицию Trainee Python Developer / Mock interview
▶
15 теоретических вопросов для начинающего Python-программиста на собеседовании (и 1 задача)
▶
Собеседование Java Junior | Алексей Сытый vs. Максим Добрынин | Jetbulb
▶
Собеседование Java Junior | Jetbulb
▶
Публичное Собеседование iOS | Alex Ozun, Роман Тысячник | iOS Ukraine #2
▶
luchanos | Balabot IT LIVE | Собеседование Junior Python Backend Developer
▶
luchanos | Balabot IT LIVE | Собеседование Junior Python Backend Developer
▶
Тестовое собеседование Java разработчика #16 - Павел Хшановский
▶
Публичное собеседование: iOS-разработчик [Хекслет]
▶
Пробное собеседование Junior C# developer (backend)