Объектно-ориентированное программирование
Уроки Открыть IDE
На главную
ООП • Урок 8

Наследование

Как один класс может быть частным случаем другого

Антипример: дублирование кода

Представьте, что мы пишем программу для автопарка. У нас есть обычные автомобили и грузовики. У них много общего, но у грузовиков есть дополнительная характеристика — грузоподъёмность.

Проблема: свойства brand, model, year, engine_volume и методы start(), stop() повторяются в двух классах. Это нарушает принцип DRY.

Если захочется добавить новое общее свойство (например, color), придётся менять оба класса.

Решение: наследование

Наследование — это механизм, позволяющий создать новый класс на основе уже существующего. Новый класс (потомок) получает все свойства и методы родительского класса и может добавлять свои.

Синтаксис: class ИмяПотомка extends ИмяРодителя.

Теперь класс Truck автоматически имеет все свойства и методы класса Car, плюс собственное свойство load_capacity. Дублирование кода исчезло!

Доступ к унаследованным свойствам и методам

Свойства и методы, объявленные в родительском классе, доступны потомку так же, как если бы они были объявлены в нём самом:

КАМАЗ 5490 завёлся

Потомок «видит» всё, что есть у родителя.

Конструкторы и parent()

Если у родительского класса есть конструктор, потомок может вызвать его с помощью ключевого слова parent(). Это нужно, чтобы не дублировать инициализацию унаследованных свойств.

КАМАЗ 5490 завёлся Грузоподъёмность: 20 тонн

parent() всегда должен быть первым в теле конструктора потомка.

Итог

  • Наследование — механизм создания нового класса на основе существующего.
  • Синтаксис: class Потомок extends Родитель.
  • Потомок получает все свойства и методы родителя.
  • parent() — вызов конструктора родительского класса из конструктора потомка.
  • Потомок может переопределять методы родителя, давая свою реализацию.
  • Наследование помогает избегать дублирования кода и выражает отношение «является» (is-a).