Давайте рассмотрим такое понятие, как наследование в программировании. 

Зачем это нужно и как это применять на практике?

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

Давайте будем разбираться, как это может быть применимо к программированию.

Это теоретическая часть и мы не привязываемся ни к какому языку программирования. 

Главная проблема при разработке больших и сложных приложений в том, что в них очень много объектов. См. видео картинку. Могут быть наземные, воздушные элементы и.т.д.

Таких объектов, из которых состоит программа, может быть очень и очень много. В играх - это персонажи этих игр. 

На сайтах тоже бывают объекты, например, пост, страница, товар и.т.д. Это все объекты.

Основная сложность в управлении этими объектами. 

Предположим, нам нужна команда для объектов, которые обладают каким-то общим свойством. 

Например, мы разрабатываем игру и нам нужно дать команду всем воздушным элементам команду приземлиться. 

Мы можем дать эту команду:

объект1.приземлись();

объект2.приземлись();

объект3.приземлись();

...

Или можно дать эту команду абстрактному понятию "летательный аппарат".

литательный_аппарат.приземлись();

В итоге, все летательные аппараты должны пойти на посадку. 

Обратите внимание, что количество строк кода уменьшилось до одной строки. Разница в эффективности очевидна.

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

Это стало возможным из-за того, что мы объединили наши объекты по какому-то общему признаку в отдельную сущность и назвали эту сущность "летательный_аппарат". Это и есть то самое наследование. 

Т.е. наследование - это процесс при проектировании нашего приложения при котором мы объединяем какие-то объекты, которые имеют схожие характеристики в единую структуру с главным родительским элементом. 

Наследование - это один из способов, как можно организовать код программы. Можно обойтись и без наследования. 

Вопрос в том, насколько удобно вам будет в дальнейшем вашу программу расширять, пользоваться кодом этого приложения и взаимодействовать с такой программой. 

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

Наследование в такой диаграмме показывается в виде стрелки и такая диаграмма называется UML-диаграмма. 

Например, у нас есть сайт и на этом сайте родительским классом будет являться Контент, а дочерними классами могут являться посты и страницы. 

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

Можно не применять наследование для такой структуры, но мы получаем дублирование свойств и методов в каждом классе. 

Преимущества наследования:

+ Нет повтора кода

+ Простота расширения приложения

Если мы разрабатываем приложение и у нас появился еще один вид контента, например товар. У товара может быть также заголовок, контент и.т.д. 

Мы можем просто расширить родительский класс контент и у нас уже появляется новый элемент контента.

+ Простота управления сущностями

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

Во многих сложных и больших программах, вы можете увидеть ситуацию, что какой-то объект расширяет другие объекты. Есть родительские объекты, а есть дочерние объекты. Каким бы языком программирования вы бы не пользовались, такое понятие имеет место быть и с этим можно очень часто сталкиваться. 

Надеюсь стало понятнее, что такое наследование и зачем это нужно и теперь вы можете посмотреть конструкции по наследованию, которые есть в вашем языке программирования. 

Главное понимать смысл и процесс программирования должен стать для вас намного более удобнее, проще и приятнее.