Программирование предусматривает различные методологии. В зависимости от них меняется функционал выбираемых языков. Огромным спросом пользуется ООП. Здесь в основе заложено взаимодействие объектов, а не «чистая логика» и абстракции.
В данной статье будет рассказано о том, что собой представляет объектно-ориентированное программирование. Особое внимание уделено наследованию классов и иных элементов. Предложенные сведения окажутся одинаково полезны и новичкам, и продвинутым разработчикам. Акцент будет сделан на Си-семействе (С++), а также Java. Это – непревзойденные лидеры в области ООП.
ООП – определение
Это – специализированная методология программирования, которая опирается на представлении программы в виде некой связи взаимодействующий между собой объектов. Каждый из них – это экземпляр определенного класса. Классы будут образовывать иерархию наследования, о которой сказано далее.
Идеологически объектно-ориентированное программирование – это подход к написанию исходного кода утилиты как к моделированию информационных объектов. На новом уровне они решают основную задачу структурного программирования. Этот прием позволяет добиться быстрых и эффективных результатов в крупных проектах.
Принципы ООП
Каждый программер может освоить любой язык объектно-ориентированного типа. Независимо от выбранного варианта, требуется понять ключевые принципы соответствующего подхода к написанию программного обеспечения.
Вот основные принципы:
- Абстракция. Помогает выделять в моделируемом предмете важного для решения конкретных задач. В итоге понимание объекта будет трактоваться в виде класса.
- Инкапсуляция. Обеспечивает быструю и безопасную организацию иерархической управляемости. Тут ведется уточнение «что делать», а не «как добиться цели».
- Наследование. Весьма важный процесс, позволяющий организовывать родственные понятия. На каждом шаге иерархии должны быть понятны только необходимые корректировки, без дублирования «оставшихся» элементов кода.
- Полиморфизм. Нужен для того, чтобы определять точки, в которых единое управление лучше распараллелить или наоборот – скомпоновать в единое целое.
Все это помогает работать с классами, а также делать приложение максимально понятным для рядового пользователя. Через рассматриваемую методологию удается добиться высокой детализации проекта.
Терминология
Перед тем, как разработчик узнает, что такое иерархия, ему нужно запомнить несколько ключевых понятий. Они встречаются в разных языках программирования. Выступают в качестве «базы», без которой дальнейший коддинг становится невозможным:
- Алгоритм – принцип или правила, которые необходимы для достижения изначально поставленной задачи.
- API – интерфейс прикладного программирования. Представлен правилами, протоколами и процедурами, необходимыми для написания контента. Помогает приложениям взаимодействовать друг с другом.
- Аргументы – значения, передаваемые в функции и команды.
- Символы – элементарные единицы отображения электронных материалов. Выражаются цифирными или буквенными записями.
- Объект – набор связанных переменных, структур данных, а также констант. Они будут отобраны и совместно обработаны утилитой.
- Класс – набор связанных между собой объектов. У таких компонентов есть общие свойства (public).
- Константы – переменные (значения), которые не меняются на протяжении выполнения кода программы.
- Тип данных – способ классификации информации электронного характера определенного типа.
- Переменная – именованная ячейка выделенной памяти. Может при обработке кода считываться, сохраняться, изменяться согласно представленным программером алгоритмам.
- Массив – списки схожих типов значений, заранее прошедшие процедуру группировки. Множество информации.
- Фреймворк – готовый блок кода, используемый для ускорения написания программы. Может корректироваться разработчиком «под себя». Вмещает API, а также классы и объекты, иные инструменты.
- Оператор – объект, манипулирующий операндами.
- Операнд – элемент кода, которым можно управлять через специальные компоненты: операторы.
- Указатели – переменные с адресом места в памяти. Обладают уникальными именами.
- Пакет – организованный модель связанных интерфейсов и классов. Помогают организовывать классы, которые относятся к одной и той же категории или предоставляют соответствующие функциональные возможности.
Отдельно можно выделить понятие синтаксиса – это правила и принципы передачи операторов. То, как должен быть написан исходных код.
Наследование – что это
При разборе тем, посвященных методам коддинга и ООП, важно обратить внимание на наследование. Это – одна из основ объектно-ориентированного программирования. При помощи нее класс сможет использовать переменные и методы другого класса, словно собственные.
Класс, который наследует данные, является подклассом. Он также носит название производного или дочернего.
Класс, который дает «базу» для наследования» — суперкласс или базовые. Может называться родительским (или просто «родителем»).
Наследование полезно, так как оно дает возможность структурирования и повторного использования кода. Это способствует более быстрой и качественной разработке. Но работа с классами и рассматриваемой операцией требует от программера осторожности. Большинство корректировок в суперклассе затрагивают все подклассы. Это влечет за собой непредвиденные последствия.
Каждый язык программирования предусматривает свои особенности и нюансы применения наследования классов. Далее будет приведен пример на C++, а затем – опубликована полезная информация для разработчиков на Java.
В Си Плюс-Плюс выделяются несколько типов наследования:
- Публичный. Это – public class. Здесь есть общие (public) и защищенные (protected) данные. Они будут наследоваться без корректировки изначально предусмотренного уровня доступа к оным.
- Защищенный. Носит название protected. Вся информация, которая была унаследована, получит статус «защищенной».
- Приватный – private. Все передаваемые электронные материалы будут «приватными».
Чтобы лучше понимать принципы и методы их работы, стоит рассмотреть наглядный пример. В нем для базового класса Device уровень доступа к электронным материалам остается неизменным. Связано это с тем, что производный класс Computer будет наследовать сведения в виде приватных. Информация для класса Computer будет приватной.
Вот так будет выглядеть пример:
#include <iostream>
using namespace std;
class Device {
public:
int serial_number = 12345678;
void turn_on() {
cout << "Device is on" << endl;
}
};
class Computer: private Device {
public:
void say_hello() {
turn_on();
cout << "Welcome to Windows 95!" << endl;
}
};
int main() {
Device Device_instance;
Computer Computer_instance;
cout << "\t Device" << endl;
cout << "Serial number is: "<< Device_instance.serial_number << endl;
Device_instance.turn_on();
// cout << "Serial number is: " << Computer_instance.serial_number << endl;
// Computer_instance.turn_on();
// will cause compile time error
cout << "\t Computer" << endl;
Computer_instance.say_hello();
return 0;
}
Здесь:
- Класс Computer будет использовать метод turn_on() точно так же, как и любой приватный.
- Turn_on может быть вызван внутри класса. Попытка обратиться к нему напрямую через main повлечет за собой ошибку во время компилирования.
- Для родительского класса Device метод turn_on выступает в качестве публичного. Он может быть вызван из main.
Все это наглядно объясняет типы наследования в C++.
Конструкторы и деструкторы
Конструкторы и деструкторы в C++ не проходят стадию наследования. Они могут быть вызваны, если дочерний класс будет инициализировать свой объект. Конструкторы будут вызываться иерархическим способом один за другим. Начало – базовый класс, конец – последний производный.
Деструкторы тоже могут быть вызваны при инициализации классом имеющегося объекта. Соответствующий процесс в данном случае осуществляется в обратном порядке по сравнению с конструкторами.
#include <iostream>
using namespace std;
class Device {
public:
// constructor
Device() {
cout << "Device constructor called" << endl;
}
// destructor
~Device() {
cout << "Device destructor called" << endl;
}
};
class Computer: public Device {
public:
Computer() {
cout << "Computer constructor called" << endl;
}
~Computer() {
cout << "Computer destructor called" << endl;
}
};
class Laptop: public Computer {
public:
Laptop() {
cout << "Laptop constructor called" << endl;
}
~Laptop() {
cout << "Laptop destructor called" << endl;
}
};
int main() {
cout << "\tConstructors" << endl;
Laptop Laptop_instance;
cout << "\tDestructors" << endl;
return 0;
}
Это – пример кода, который поможет понять принцип вызова упомянутых компонентов. В виде конструкторов выступают: Device-Computer-Laptop, деструкторов: laptop-Computer-Device.
Множественное наследование
Рассматривая иерархию классов с, стоит обратить внимание на множественное наследование. Оно происходит тогда, когда подкласс имеет два или более суперкласса (ключевое слово super class).
Выше – пример того, как выглядит в виде кодификации. Здесь класс Laptop будет одновременно выступать «наследником» Monitor и Computer.
Виртуальное наследование
В C++ есть new понятие – это «виртуальное наследование». Оно:
- Позволяет предотвратить появление множественных объектов базового класса в иерархии наследования.
- Конструктор базового класса Device – вызывается один раз.
- Обращение к turn_on без предопределения «родителя» в дочернем классе не вызовет ошибку при компиляции.
Выше – наглядный пример виртуального «варианта». В классах Computer и Monitor такой подход не разрешает ромбовидное наследование, если «дочь» Laptop будет получать в качестве «наследодателя» класс Device не виртуально (class Laptop: public Computer, public Monitor, public Device {};).
Иерархия в Java
Наследование в Java – это более понятный вариант. Освоить его принципы проще, чем в случае с C++. This method носит название «расширение класса». Ключевые понятия и определения тут точно такие же, как и в случае с Си-семейством. Поэтому слово public не должно вызывать проблемы.
Что унаследовано
При рассмотрении темы требуется запомнить:
- Когда подкласс расширяет суперкласс в Джаве, он будет наследовать защищенные и открытые (public) поля и методы. Они станут частью оной, словно подкласс сам их объявил.
- Защищенные и public поля можно вызывать и ссылаться на них, как на объявленные в их пределах методы.
- Поля и методы с модификаторами доступа по умолчанию (пакеты) бывают доступны для подклассов, если они расположены там же, где и superclass.
- На частные поля и методы (не public) суперкласса нельзя непосредственно ссылаться. Для этого используются методы, доступные для подкласса.
Как и в C++, конструкторы не подлежат рассматриваемой процедуре. Они должны вызывать конструктор для подкласса в superclass.
Единичный «подход»
Наследование в Java может быть единичным. Это – самый распространенный вариант. Он дает возможность получать свойства только от одного superclass.
Множественный вариант создает некоторые проблемы в ЯП. Пример – когда суперклассы имеют методы с одними и теми же именами и параметрами. Из Джавы такой вариант исключен. Поэтому достаточно понять права доступа и общие (public) принципы изучаемой операции.
Как объявить
Для того, чтобы воспользоваться приемом, когда уже ясно, что такое public, нужно использовать ключевик extends:
Здесь:
- Car будет выступать «расширителем» Vehicle.
- Соответствующее явление приводит к тому, что защищенное поле (не public) licensePlate из Vehicle перейдет в Car.
- После «получения свойств» от licensePlate, оно станет доступным внутри экземпляра Car.
Можно сослаться на Car. Делается это так:
Ссылка осуществляется внутри методы getLicensePlate. Обычно его помещают в класс Vehicle.
Приведение типов
Когда понятия public. Private, public static void и другие «базовые» для разработки поняты, можно переходить к более сложным моментам. В Джаве можно составлять на подкласс как на экземпляр одного из его суперклассов.
Сначала здесь будет создан экземпляр авто, затем он присваивается переменной типа Vehicle. Далее ссылка будет указывать на соответствующий экземпляр.
Приведение типа – это процесс ссылки на объект класса как тип, отличный от самого class a. Объект «перебрасывается» из одного вида в другой.
Upcasting и Downcasting
При разработке можно привести объект подкласса к одному из его superclass. К этому моменту пользователь должен уже хорошо разбираться в правах доступа, включая public.
Объект «наследника» может быть приведен к:
- одному из его «родителей»;
- из типа superclass к типу подкласса, если объект действительно выступает его экземпляром.
Приведенный пример downcasting будет действителен. А здесь можно посмотреть туториал по наследованию классов.
Как лучше понять процесс
Рассматривать соответствующую тему в «голой теории» — не лучшее решение. Понятия public и private можно изучить «только на бумаге». В случае с более сложными компонентами огромную роль играет практика. А еще – грамотно подобранный материал.
Здесь рассказывается о выбранном направлении в ООП в общих чертах. А тут – основы для C++.
Необходимые знания можно получить при помощи самообразования, а также обучаясь в техникуме или ВУЗе на направлении «программирование». Там рассказывают о наследовании в Java и других ЯП, разбирая процесс «с нуля».
Но лучшее решение – это дистанционные компьютерные курсы. Пользователи смогут заниматься тогда, когда им удобно. Программы рассчитаны как на новичков, так и на опытных разработчиков. Можно освоить одновременно несколько направлений в течении года. В конце выдается электронный сертификат, подтверждающий навыки и знания. С такими курсами элементы кода как static void main, superclass, public и другие будут понятны даже новичку.
<!DOCTYPE html>
<html dir="ltr" lang="ru-RU">
<head>
<meta charset="UTF-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="profile" href="http://gmpg.org/xfn/11" />
<title>Наследование в программировании на примере C++ и Java OTUS</title>
<!-- All in One SEO 4.5.2.1 - aioseo.com -->
<meta name="description" content="Программирование предусматривает различные методологии. В зависимости от них меняется функционал выбираемых языков. Огромным спросом пользуется ООП. Здесь в основе заложено взаимодействие объектов, а не «чистая логика» и абстракции. В данной статье будет рассказано о том, что собой представляет объектно-ориентированное программирование. Особое внимание уделено наследованию классов и иных элементов. Предложенные сведения окажутся одинаково полезны и новичкам," />
<meta name="robots" content="max-image-preview:large" />
<link rel="canonical" href="https://otus.ru/journal/nasledovanie-v-programmirovanii-na-primere-c-i-java/" />
<meta name="generator" content="All in One SEO (AIOSEO) 4.5.2.1" />
<script type="application/ld+json" class="aioseo-schema">
{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/otus.ru\/journal\/nasledovanie-v-programmirovanii-na-primere-c-i-java\/#article","name":"\u041d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 C++ \u0438 Java OTUS","headline":"\u041d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 C++ \u0438 Java","author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2022\/06\/oj-1080x720-11.png","width":1080,"height":720},"datePublished":"2022-06-21T18:33:27+00:00","dateModified":"2022-06-21T18:33:30+00:00","inLanguage":"ru-RU","mainEntityOfPage":{"@id":"https:\/\/otus.ru\/journal\/nasledovanie-v-programmirovanii-na-primere-c-i-java\/#webpage"},"isPartOf":{"@id":"https:\/\/otus.ru\/journal\/nasledovanie-v-programmirovanii-na-primere-c-i-java\/#webpage"},"articleSection":"\u041f\u043e\u043b\u0435\u0437\u043d\u043e\u0435, c++, Java"},{"@type":"BreadcrumbList","@id":"https:\/\/otus.ru\/journal\/nasledovanie-v-programmirovanii-na-primere-c-i-java\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/#listItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/otus.ru\/journal\/","nextItem":"https:\/\/otus.ru\/journal\/nasledovanie-v-programmirovanii-na-primere-c-i-java\/#listItem"},{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/nasledovanie-v-programmirovanii-na-primere-c-i-java\/#listItem","position":2,"name":"\u041d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 C++ \u0438 Java","previousItem":"https:\/\/otus.ru\/journal\/#listItem"}]},{"@type":"Organization","@id":"https:\/\/otus.ru\/journal\/#organization","name":"\u041e\u0442\u0443\u0441 \u043e\u043d\u043b\u0430\u0439\u043d-\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435","url":"https:\/\/otus.ru\/journal\/","sameAs":["https:\/\/www.youtube.com\/channel\/UCetgtvy93o3i3CvyGXKFU3g"],"contactPoint":{"@type":"ContactPoint","telephone":"+74999389202","contactType":"Customer Support"}},{"@type":"Person","@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author","url":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/","name":"A. Pavlenko","image":{"@type":"ImageObject","@id":"https:\/\/otus.ru\/journal\/nasledovanie-v-programmirovanii-na-primere-c-i-java\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/d4c499a104d7c2522fa41f89e6819499?s=96&d=mm&r=g","width":96,"height":96,"caption":"A. Pavlenko"}},{"@type":"WebPage","@id":"https:\/\/otus.ru\/journal\/nasledovanie-v-programmirovanii-na-primere-c-i-java\/#webpage","url":"https:\/\/otus.ru\/journal\/nasledovanie-v-programmirovanii-na-primere-c-i-java\/","name":"\u041d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 C++ \u0438 Java OTUS","description":"\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u0438\u0445 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432. \u041e\u0433\u0440\u043e\u043c\u043d\u044b\u043c \u0441\u043f\u0440\u043e\u0441\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u041e\u041e\u041f. \u0417\u0434\u0435\u0441\u044c \u0432 \u043e\u0441\u043d\u043e\u0432\u0435 \u0437\u0430\u043b\u043e\u0436\u0435\u043d\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0430 \u043d\u0435 \u00ab\u0447\u0438\u0441\u0442\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430\u00bb \u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u043e\u0431\u043e\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u041e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0443\u0434\u0435\u043b\u0435\u043d\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044e \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u0438\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b \u0438 \u043d\u043e\u0432\u0438\u0447\u043a\u0430\u043c,","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/otus.ru\/journal\/#website"},"breadcrumb":{"@id":"https:\/\/otus.ru\/journal\/nasledovanie-v-programmirovanii-na-primere-c-i-java\/#breadcrumblist"},"author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"creator":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2022\/06\/oj-1080x720-11.png","@id":"https:\/\/otus.ru\/journal\/nasledovanie-v-programmirovanii-na-primere-c-i-java\/#mainImage","width":1080,"height":720},"primaryImageOfPage":{"@id":"https:\/\/otus.ru\/journal\/nasledovanie-v-programmirovanii-na-primere-c-i-java\/#mainImage"},"datePublished":"2022-06-21T18:33:27+00:00","dateModified":"2022-06-21T18:33:30+00:00"},{"@type":"WebSite","@id":"https:\/\/otus.ru\/journal\/#website","url":"https:\/\/otus.ru\/journal\/","name":"OTUS JOURNAL","description":"Blog about IT","inLanguage":"ru-RU","publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"}}]}
</script>
<!-- All in One SEO -->
<link rel='dns-prefetch' href='//otus.ru' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel='stylesheet' id='wp-block-library-css' href='https://otus.ru/journal/wp-includes/css/dist/block-library/style.min.css?ver=6.4.7' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
.wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
.wp-block-pullquote{font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='wbcr-comments-plus-url-span-css' href='https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/css/url-span.css?ver=2.2.0' type='text/css' media='all' />
<link rel='stylesheet' id='wpel-style-css' href='https://otus.ru/journal/wp-content/plugins/wp-external-links/public/css/wpel.css?ver=2.59' type='text/css' media='all' />
<link rel='stylesheet' id='ez-toc-css' href='https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.61' type='text/css' media='all' />
<style id='ez-toc-inline-css' type='text/css'>
div#ez-toc-container .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li {font-size: 95%;}div#ez-toc-container nav ul ul li {font-size: 90%;}
.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
</style>
<link rel='stylesheet' id='contentberg-fonts-css' href='https://fonts.googleapis.com/css?family=Roboto%3A400%2C500%2C700%7CPT+Serif%3A400%2C400i%2C600%7CIBM+Plex+Serif%3A500' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-core-css' href='https://otus.ru/journal/wp-content/themes/contentberg/style.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-lightbox-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/lightbox.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='font-awesome-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/fontawesome/css/font-awesome.min.css?ver=1.8.3' type='text/css' media='all' />
<script type="text/javascript" id="breeze-prefetch-js-extra">
/* <![CDATA[ */
var breeze_prefetch = {"local_url":"https:\/\/otus.ru\/journal","ignore_remote_prefetch":"1","ignore_list":["\/wp-admin\/"]};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js" id="breeze-prefetch-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.min.js" id="jquery-core-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery-migrate.min.js" id="jquery-migrate-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/lazysizes.js" id="lazysizes-js"></script>
<link rel="https://api.w.org/" href="https://otus.ru/journal/wp-json/" /><link rel="alternate" type="application/json" href="https://otus.ru/journal/wp-json/wp/v2/posts/3829" /><link rel='shortlink' href='https://otus.ru/journal/?p=3829' />
<link rel="alternate" type="application/json+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fnasledovanie-v-programmirovanii-na-primere-c-i-java%2F" />
<link rel="alternate" type="text/xml+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fnasledovanie-v-programmirovanii-na-primere-c-i-java%2F&format=xml" />
<script>var Sphere_Plugin = {"ajaxurl":"https:\/\/otus.ru\/journal\/wp-admin\/admin-ajax.php"};</script><link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-32x32.png" sizes="32x32" />
<link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-180x180.png" />
<meta name="msapplication-TileImage" content="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-270x270.png" />
<style type="text/css" id="wp-custom-css">
#menu-item-10406 .wpel-icon {
display: none;
}
#menu-item-10407 .wpel-icon {
display: none;
}
.otus-login-site a .wpel-icon {
display: none;
}
.menu-menju-navykov-container a .wpel-icon {
display: none;
}
.otus-login-site a
{
background: #ffd709;
border-radius: 12px;
color: #0f0f10;
font-size: 14px;
font-weight: 700;
line-height: 20px;
display: block;
text-align: center;
padding: 8px 25px;
}
.main-footer.dark {
background: linear-gradient(90deg, #a64fc5, #4f54e6);
border-color: transparent;
}
.main-footer.bold .copyright {
color: #fff;
}
.main-footer.bold .to-top i {
color: #fff;
}
.main-footer.bold .back-to-top {
color: #fff;
}
.nav__scroll {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.scrollable-menu .menu {
display: flex;
}
.nav__scroll
{
background: linear-gradient(90deg, #a64fc5, #4f54e6);
}
.scrollable-menu .menu .menu-item {
flex: 0 0 auto;
padding: 15px 15px;
}
.scrollable-menu .menu .menu-item a {
color: #fff;
}
.nav__scroll::-webkit-scrollbar{background-color:#fff;height:5px;}
.nav__scroll::-webkit-scrollbar-thumb{background-color:#dcdcdc;}
.nav__scroll::-webkit-scrollbar-track{-webkit-border-radius:0;border-radius:0;background-color:#fff;}/
body {
min-width: 320px;
}
.banner-click img {
margin: 0 auto;
display: block;
}
.banner-click {
cursor: pointer;
}
.banner-footer-area {
margin-bottom: 20px;
}
.banner-left-area {
margin-top: 40px;
} </style>
<!--Start VDZ Yandex Metrika Plugin-->
<!-- Yandex.Metrika counter --><script type="text/javascript" >(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");ym(34531570, "init", {clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, trackHash:true, ecommerce:"dataLayer"});</script>
<noscript><div><img src="https://mc.yandex.ru/watch/34531570" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter --><!--START ADD EVENTS FROM CF7--><script type='text/javascript'>document.addEventListener( 'wpcf7submit', function( event ) {
//event.detail.contactFormId;
if(ym){
//console.log(event.detail);
ym(34531570, 'reachGoal', 'VDZ_SEND_CONTACT_FORM_7');
ym(34531570, 'params', {
page_url: window.location.href,
status: event.detail.status,
locale: event.detail.contactFormLocale,
form_id: event.detail.contactFormId,
});
}
}, false );
</script><!--END ADD EVENTS FROM CF7-->
<!--End VDZ Yandex Metrika Plugin-->
</head>
<body class="post-template-default single single-post postid-3829 single-format-standard right-sidebar lazy-normal has-lb">
<div class="main-wrap">
<header id="main-head" class="main-head head-nav-below has-search-modal simple simple-boxed">
<div class="inner inner-head" data-sticky-bar="0">
<div class="wrap cf wrap-head">
<div class="left-contain">
<span class="mobile-nav"><i class="fa fa-bars"></i></span>
<div class="title">
<a href="https://otus.ru/journal/" title="OTUS JOURNAL" rel="home" data-wpel-link="internal">
<span class="text-logo"><img src="/journal/wp-content/themes/contentberg/img/logo_site.svg" alt="OTUS JOURNAL"></span>
</a>
</div>
</div>
<div class="navigation-wrap inline">
<nav class="navigation inline simple light" data-sticky-bar="0">
<div class="menu-rubriki-container"><ul id="menu-rubriki" class="menu"><li id="menu-item-109" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-1 menu-item-109"><a href="https://otus.ru/journal/category/pro-it/" data-wpel-link="internal"><span>Про IT</span></a></li>
<li id="menu-item-113" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-cat-4 menu-item-113"><a href="https://otus.ru/journal/category/polza/" data-wpel-link="internal"><span>Полезное</span></a></li>
<li id="menu-item-114" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-3 menu-item-114"><a href="https://otus.ru/journal/category/lifestyle/" data-wpel-link="internal"><span>Лайфстайл</span></a></li>
<li id="menu-item-10406" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10406"><a href="https://otus.ru/catalog/courses" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Обучение</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10407" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10407"><a href="https://otus.ru/about" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Информация</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </nav>
</div>
<div class="actions">
<div class="otus-login-site">
<a href="https://otus.ru/login/" target="_blank" data-wpel-link="external" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Войти<span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
<a href="#" title="Search" class="search-link"><i class="fa fa-search"></i></a>
</div>
</div>
</div>
</header> <!-- .main-head -->
<div class="nav nav_disable nav_colored nav_transparent course-categories__nav nav__scroll ">
<div class="container wrap">
<div class="links inline simple light scrollable-menu">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov" class="menu"><li id="menu-item-10413" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10414" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10415" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10416" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10417" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10418" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10419" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10420" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10421" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
</div>
</div>
<div class="main wrap">
<div class="ts-row cf">
<div class="col-8 main-content cf">
<article id="post-3829" class="the-post post-3829 post type-post status-publish format-standard has-post-thumbnail category-polza tag-c tag-java">
<header class="post-header the-post-header cf">
<div class="post-meta the-post-meta">
<span class="post-cat">
<a href="https://otus.ru/journal/category/polza/" class="category" data-wpel-link="internal">Полезное</a>
</span>
<h1 class="post-title">
Наследование в программировании на примере C++ и Java
</h1>
<a href="https://otus.ru/journal/nasledovanie-v-programmirovanii-na-primere-c-i-java/" class="date-link" data-wpel-link="internal"><time class="post-date">21 июня, 2022</time></a>
</div>
<div class="featured">
<a href="https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-11.png" class="image-link" data-wpel-link="internal"><img width="770" height="515" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20770%20515%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-contentberg-main size-contentberg-main lazyload wp-post-image" alt="Наследование в программировании на примере C++ и Java" title="Наследование в программировании на примере C++ и Java" decoding="async" fetchpriority="high" data-srcset="https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-11-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-11-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-11-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-11-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-11-270x180.png 270w" data-src="https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-11-770x515.png" data-sizes="(max-width: 770px) 100vw, 770px" /> </a>
</div>
</header><!-- .post-header -->
<div class="post-content description cf entry-content content-normal">
<div id="ez-toc-container" class="ez-toc-v2_0_61 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title " >Содержание</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#%D0%9E%D0%9E%D0%9F_%E2%80%93_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5" title="ООП – определение">ООП – определение</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-2" href="#%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%D1%8B_%D0%9E%D0%9E%D0%9F" title="Принципы ООП">Принципы ООП</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-3" href="#%D0%A2%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F" title="Терминология">Терминология</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-4" href="#%D0%9D%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%E2%80%93_%D1%87%D1%82%D0%BE_%D1%8D%D1%82%D0%BE" title="Наследование – что это">Наследование – что это</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-5" href="#%D0%9D%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B2_C" title="Наследование в C++">Наследование в C++</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-6" href="#%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D0%BE%D1%80%D1%8B_%D0%B8_%D0%B4%D0%B5%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D0%BE%D1%80%D1%8B" title="Конструкторы и деструкторы">Конструкторы и деструкторы</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-7" href="#%D0%9C%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BD%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" title="Множественное наследование">Множественное наследование</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-8" href="#%D0%92%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BD%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" title="Виртуальное наследование">Виртуальное наследование</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-9" href="#%D0%98%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%8F_%D0%B2_Java" title="Иерархия в Java">Иерархия в Java</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-10" href="#%D0%A7%D1%82%D0%BE_%D1%83%D0%BD%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%BE" title="Что унаследовано">Что унаследовано</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-11" href="#%D0%95%D0%B4%D0%B8%D0%BD%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%C2%AB%D0%BF%D0%BE%D0%B4%D1%85%D0%BE%D0%B4%C2%BB" title="Единичный «подход»">Единичный «подход»</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-12" href="#%D0%9A%D0%B0%D0%BA_%D0%BE%D0%B1%D1%8A%D1%8F%D0%B2%D0%B8%D1%82%D1%8C" title="Как объявить">Как объявить</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-13" href="#%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2" title="Приведение типов">Приведение типов</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-14" href="#Upcasting_%D0%B8_Downcasting" title="Upcasting и Downcasting">Upcasting и Downcasting</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-15" href="#%D0%9A%D0%B0%D0%BA_%D0%BB%D1%83%D1%87%D1%88%D0%B5_%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D1%8C_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81" title="Как лучше понять процесс">Как лучше понять процесс</a></li></ul></nav></div>
<p>Программирование предусматривает различные методологии. В зависимости от них меняется функционал выбираемых языков. Огромным спросом пользуется ООП. Здесь в основе заложено взаимодействие объектов, а не «чистая логика» и абстракции.</p>
<p>В данной статье будет рассказано о том, что собой представляет объектно-ориентированное программирование. Особое внимание уделено наследованию классов и иных элементов. Предложенные сведения окажутся одинаково полезны и новичкам, и продвинутым разработчикам. Акцент будет сделан на Си-семействе (С++), а также Java. Это – непревзойденные лидеры в области ООП.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D0%9E%D0%9F_%E2%80%93_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5"></span>ООП – определение<span class="ez-toc-section-end"></span></h2>
<p>Это – специализированная методология программирования, которая опирается на представлении программы в виде некой связи взаимодействующий между собой объектов. Каждый из них – это экземпляр определенного класса. Классы будут образовывать иерархию наследования, о которой сказано далее.</p>
<p>Идеологически объектно-ориентированное программирование – это подход к написанию исходного кода утилиты как к моделированию информационных объектов. На новом уровне они решают основную задачу структурного программирования. Этот прием позволяет добиться быстрых и эффективных результатов в крупных проектах.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%D1%8B_%D0%9E%D0%9E%D0%9F"></span>Принципы ООП<span class="ez-toc-section-end"></span></h3>
<p>Каждый программер может освоить любой язык объектно-ориентированного типа. Независимо от выбранного варианта, требуется понять ключевые принципы соответствующего подхода к написанию программного обеспечения.</p>
<p>Вот основные принципы:</p>
<ol type="1"><li>Абстракция. Помогает выделять в моделируемом предмете важного для решения конкретных задач. В итоге понимание объекта будет трактоваться в виде класса.</li><li>Инкапсуляция. Обеспечивает быструю и безопасную организацию иерархической управляемости. Тут ведется уточнение «что делать», а не «как добиться цели».</li><li>Наследование. Весьма важный процесс, позволяющий организовывать родственные понятия. На каждом шаге иерархии должны быть понятны только необходимые корректировки, без дублирования «оставшихся» элементов кода.</li><li>Полиморфизм. Нужен для того, чтобы определять точки, в которых единое управление лучше распараллелить или наоборот – скомпоновать в единое целое.</li></ol>
<p>Все это помогает работать с классами, а также делать приложение максимально понятным для рядового пользователя. Через рассматриваемую методологию удается добиться высокой детализации проекта.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A2%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F"></span>Терминология<span class="ez-toc-section-end"></span></h2>
<p>Перед тем, как разработчик узнает, что такое иерархия, ему нужно запомнить несколько ключевых понятий. Они встречаются в разных языках программирования. Выступают в качестве «базы», без которой дальнейший коддинг становится невозможным:</p>
<ol type="1"><li>Алгоритм – принцип или правила, которые необходимы для достижения изначально поставленной задачи.</li><li>API – интерфейс прикладного программирования. Представлен правилами, протоколами и процедурами, необходимыми для написания контента. Помогает приложениям взаимодействовать друг с другом.</li><li>Аргументы – значения, передаваемые в функции и команды.</li><li>Символы – элементарные единицы отображения электронных материалов. Выражаются цифирными или буквенными записями.</li><li>Объект – набор связанных переменных, структур данных, а также констант. Они будут отобраны и совместно обработаны утилитой.</li><li>Класс – набор связанных между собой объектов. У таких компонентов есть общие свойства (public).</li><li>Константы – <a href="https://otus.ru/journal/dannye-i-peremennye-v-programmirovanii/" data-wpel-link="internal">переменные</a> (значения), которые не меняются на протяжении выполнения кода программы.</li><li>Тип данных – способ классификации информации электронного характера определенного типа.</li><li>Переменная – именованная ячейка выделенной памяти. Может при обработке кода считываться, сохраняться, изменяться согласно представленным программером алгоритмам.</li><li>Массив – списки схожих типов значений, заранее прошедшие процедуру группировки. Множество информации.</li><li>Фреймворк – готовый блок кода, используемый для ускорения написания программы. Может корректироваться разработчиком «под себя». Вмещает API, а также классы и объекты, иные инструменты.</li><li>Оператор – объект, манипулирующий операндами.</li><li>Операнд – элемент кода, которым можно управлять через специальные компоненты: операторы.</li><li>Указатели – переменные с адресом места в памяти. Обладают уникальными именами.</li><li>Пакет – организованный модель связанных интерфейсов и классов. Помогают организовывать классы, которые относятся к одной и той же категории или предоставляют соответствующие функциональные возможности.</li></ol>
<p>Отдельно можно выделить понятие синтаксиса – это правила и принципы передачи операторов. То, как должен быть написан исходных код.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9D%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%E2%80%93_%D1%87%D1%82%D0%BE_%D1%8D%D1%82%D0%BE"></span>Наследование – что это<span class="ez-toc-section-end"></span></h2>
<p>При разборе тем, посвященных методам коддинга и ООП, важно обратить внимание на наследование. Это – одна из основ объектно-ориентированного программирования. При помощи нее класс сможет использовать переменные и методы другого класса, словно собственные.</p>
<p>Класс, который наследует данные, является подклассом. Он также носит название производного или дочернего.</p>
<p>Класс, который дает «базу» для наследования» — суперкласс или базовые. Может называться родительским (или просто «родителем»).</p>
<p>Наследование полезно, так как оно дает возможность структурирования и повторного использования кода. Это способствует более быстрой и качественной разработке. Но <a href="https://otus.ru/journal/rabota-s-klassami-v-programmirovanii-v-s/" data-wpel-link="internal">работа с классами</a> и рассматриваемой операцией требует от программера осторожности. Большинство корректировок в суперклассе затрагивают все подклассы. Это влечет за собой непредвиденные последствия.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9D%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B2_C"></span>Наследование в C++<span class="ez-toc-section-end"></span></h2>
<p>Каждый <a href="https://otus.ru/journal/yazyki-programmirovaniya-harakteristika-opisanie-vidy/" data-wpel-link="internal">язык программирования</a> предусматривает свои особенности и нюансы применения наследования классов. Далее будет приведен пример на C++, а затем – опубликована полезная информация для разработчиков на Java.</p>
<p>В Си Плюс-Плюс выделяются несколько типов наследования:</p>
<ol type="1"><li>Публичный. Это – public class. Здесь есть общие (public) и защищенные (protected) данные. Они будут наследоваться без корректировки изначально предусмотренного уровня доступа к оным.</li><li>Защищенный. Носит название protected. Вся информация, которая была унаследована, получит статус «защищенной».</li><li>Приватный – private. Все передаваемые электронные материалы будут «приватными».</li></ol>
<p>Чтобы лучше понимать принципы и методы их работы, стоит рассмотреть наглядный пример. В нем для базового класса Device уровень доступа к электронным материалам остается неизменным. Связано это с тем, что производный класс Computer будет наследовать сведения в виде приватных. Информация для класса Computer будет приватной.</p>
<p>Вот так будет выглядеть пример:</p>
<pre class="wp-block-code"><code>#include <iostream>
<a href="https://otus.ru/journal/prostranstva-imen-i-direktivy-v-c/" data-wpel-link="internal">using</a> <a href="https://otus.ru/journal/prostranstva-namespace-c-i-c/" data-wpel-link="internal">namespace</a> std;
class Device {
public:
<a href="https://otus.ru/journal/tipy-dannyh-i-int-v-programmirovanii/" data-wpel-link="internal">int</a> serial_number = 12345678;
void turn_on() {
cout << "Device is on" << endl;
}
};
class Computer: private Device {
public:
void say_hello() {
turn_on();
cout << "Welcome to Windows 95!" << endl;
}
};
int main() {
Device Device_instance;
Computer Computer_instance;
cout << "\t Device" << endl;
cout << "Serial number is: "<< Device_instance.serial_number << endl;
Device_instance.turn_on();
// cout << "Serial number is: " << Computer_instance.serial_number << endl;
// Computer_instance.turn_on();
// will cause compile time error
cout << "\t Computer" << endl;
Computer_instance.say_hello();
<a href="https://otus.ru/journal/return-v-c/" data-wpel-link="internal">return 0</a>;
}</code></pre>
<p>Здесь:</p>
<ol type="1"><li>Класс Computer будет использовать метод turn_on() точно так же, как и любой приватный.</li><li>Turn_on может быть вызван внутри класса. Попытка обратиться к нему напрямую через <a href="https://otus.ru/journal/main-v-c/" data-wpel-link="internal">main</a> повлечет за собой ошибку во время компилирования.</li><li>Для родительского класса Device метод turn_on выступает в качестве публичного. Он может быть вызван из main.</li></ol>
<p>Все это наглядно объясняет типы наследования в C++.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D0%BE%D1%80%D1%8B_%D0%B8_%D0%B4%D0%B5%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D0%BE%D1%80%D1%8B"></span>Конструкторы и деструкторы<span class="ez-toc-section-end"></span></h3>
<p>Конструкторы и <a href="https://otus.ru/journal/destruktory-chto-nuzhno-znat-programmistu/" data-wpel-link="internal">деструкторы</a> в C++ не проходят стадию наследования. Они могут быть вызваны, если дочерний класс будет инициализировать свой объект. Конструкторы будут вызываться иерархическим способом один за другим. Начало – базовый класс, конец – последний производный.</p>
<p>Деструкторы тоже могут быть вызваны при инициализации классом имеющегося объекта. Соответствующий процесс в данном случае осуществляется в обратном порядке по сравнению с конструкторами.</p>
<pre class="wp-block-code"><code>#include <iostream>
using namespace std;
class Device {
public:
// constructor
Device() {
cout << "Device constructor called" << endl;
}
// destructor
~Device() {
cout << "Device destructor called" << endl;
}
};
class Computer: public Device {
public:
Computer() {
cout << "Computer constructor called" << endl;
}
~Computer() {
cout << "Computer destructor called" << endl;
}
};
class Laptop: public Computer {
public:
Laptop() {
cout << "Laptop constructor called" << endl;
}
~Laptop() {
cout << "Laptop destructor called" << endl;
}
};
int main() {
cout << "\tConstructors" << endl;
Laptop Laptop_instance;
cout << "\tDestructors" << endl;
return 0;
}</code></pre>
<p>Это – пример кода, который поможет понять принцип вызова упомянутых компонентов. В виде конструкторов выступают: Device-Computer-Laptop, деструкторов: laptop-Computer-Device.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9C%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BD%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5"></span>Множественное наследование<span class="ez-toc-section-end"></span></h3>
<p>Рассматривая иерархию классов с, стоит обратить внимание на множественное наследование. Оно происходит тогда, когда подкласс имеет два или более суперкласса (ключевое слово super class).</p>
<figure class="wp-block-image size-large"><img decoding="async" width="498" height="418" src="https://otus.ru/journal/wp-content/uploads/2022/06/1-10.jpg" alt="Наследование в программировании на примере C++ и Java" class="wp-image-3831" srcset="https://otus.ru/journal/wp-content/uploads/2022/06/1-10.jpg 498w, https://otus.ru/journal/wp-content/uploads/2022/06/1-10-300x252.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/06/1-10-150x126.jpg 150w" sizes="(max-width: 498px) 100vw, 498px" /></figure>
<p>Выше – пример того, как выглядит в виде кодификации. Здесь класс Laptop будет одновременно выступать «наследником» Monitor и Computer.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%92%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BD%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5"></span>Виртуальное наследование<span class="ez-toc-section-end"></span></h3>
<p>В C++ есть new понятие – это «виртуальное наследование». Оно:</p>
<ol type="1"><li>Позволяет предотвратить появление множественных объектов базового класса в иерархии наследования.</li><li>Конструктор базового класса Device – вызывается один раз.</li><li>Обращение к turn_on без предопределения «родителя» в дочернем классе не вызовет ошибку при компиляции.</li></ol>
<figure class="wp-block-image size-large"><img decoding="async" width="460" height="523" src="https://otus.ru/journal/wp-content/uploads/2022/06/2-9.jpg" alt="Наследование в программировании на примере C++ и Java" class="wp-image-3832" srcset="https://otus.ru/journal/wp-content/uploads/2022/06/2-9.jpg 460w, https://otus.ru/journal/wp-content/uploads/2022/06/2-9-264x300.jpg 264w, https://otus.ru/journal/wp-content/uploads/2022/06/2-9-132x150.jpg 132w" sizes="(max-width: 460px) 100vw, 460px" /></figure>
<p>Выше – наглядный пример виртуального «варианта». В классах Computer и Monitor такой подход не разрешает ромбовидное наследование, если «дочь» Laptop будет получать в качестве «наследодателя» класс Device не виртуально (class Laptop: public Computer, public Monitor, public Device {};).</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%98%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%8F_%D0%B2_Java"></span>Иерархия в Java<span class="ez-toc-section-end"></span></h2>
<p>Наследование <a href="https://otus.ru/journal/operatory-v-java-opisanie-osobennosti-ispolzovanie-logicheskih-operatorov/" data-wpel-link="internal">в Java</a> – это более понятный вариант. Освоить его принципы проще, чем в случае с C++. This method носит название «расширение класса». Ключевые понятия и определения тут точно такие же, как и в случае с Си-семейством. Поэтому слово public не должно вызывать проблемы.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A7%D1%82%D0%BE_%D1%83%D0%BD%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%BE"></span>Что унаследовано<span class="ez-toc-section-end"></span></h3>
<p>При рассмотрении темы требуется запомнить:</p>
<ol type="1"><li>Когда подкласс расширяет суперкласс в Джаве, он будет наследовать защищенные и открытые (public) поля и методы. Они станут частью оной, словно подкласс сам их объявил.</li><li>Защищенные и public поля можно вызывать и ссылаться на них, как на объявленные в их пределах методы.</li><li>Поля и <a href="https://otus.ru/journal/metody-si-sharp-chto-dolzhen-znat-programmist/" data-wpel-link="internal">методы с</a> модификаторами доступа по умолчанию (пакеты) бывают доступны для подклассов, если они расположены там же, где и superclass.</li><li>На частные поля и методы (не public) суперкласса нельзя непосредственно ссылаться. Для этого используются методы, доступные для подкласса.</li></ol>
<p>Как и в C++, конструкторы не подлежат рассматриваемой процедуре. Они должны вызывать конструктор для подкласса в superclass.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%95%D0%B4%D0%B8%D0%BD%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%C2%AB%D0%BF%D0%BE%D0%B4%D1%85%D0%BE%D0%B4%C2%BB"></span>Единичный «подход»<span class="ez-toc-section-end"></span></h3>
<p>Наследование в Java может быть единичным. Это – самый распространенный вариант. Он дает возможность получать свойства только от одного superclass.</p>
<p>Множественный вариант создает некоторые проблемы в ЯП. Пример – когда суперклассы имеют методы с одними и теми же именами и параметрами. Из Джавы такой вариант исключен. Поэтому достаточно понять права доступа и общие (public) принципы изучаемой операции.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%B0%D0%BA_%D0%BE%D0%B1%D1%8A%D1%8F%D0%B2%D0%B8%D1%82%D1%8C"></span>Как объявить<span class="ez-toc-section-end"></span></h3>
<p>Для того, чтобы воспользоваться приемом, когда уже ясно, что такое public, нужно использовать ключевик extends:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="725" height="238" src="https://otus.ru/journal/wp-content/uploads/2022/06/3-9.jpg" alt="Наследование в программировании на примере C++ и Java" class="wp-image-3833" srcset="https://otus.ru/journal/wp-content/uploads/2022/06/3-9.jpg 725w, https://otus.ru/journal/wp-content/uploads/2022/06/3-9-300x98.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/06/3-9-150x49.jpg 150w" sizes="(max-width: 725px) 100vw, 725px" /></figure>
<p>Здесь:</p>
<ol type="1"><li>Car будет выступать «расширителем» Vehicle.</li><li>Соответствующее явление приводит к тому, что защищенное <a href="https://otus.ru/journal/pole-chto-eto-takoe-v-obydennoj-zhizni-i-programmirovanii/" data-wpel-link="internal">поле</a> (не public) licensePlate из Vehicle перейдет в Car.</li><li>После «получения свойств» от licensePlate, оно станет доступным внутри экземпляра Car.</li></ol>
<p>Можно сослаться на Car. Делается это так:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="564" height="160" src="https://otus.ru/journal/wp-content/uploads/2022/06/4-8.jpg" alt="Наследование в программировании на примере C++ и Java" class="wp-image-3834" srcset="https://otus.ru/journal/wp-content/uploads/2022/06/4-8.jpg 564w, https://otus.ru/journal/wp-content/uploads/2022/06/4-8-300x85.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/06/4-8-150x43.jpg 150w" sizes="(max-width: 564px) 100vw, 564px" /></figure>
<p>Ссылка осуществляется внутри методы getLicensePlate. Обычно его помещают в класс Vehicle.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2"></span>Приведение типов<span class="ez-toc-section-end"></span></h3>
<p>Когда понятия public. Private, public static void и другие «базовые» для разработки поняты, можно переходить к более сложным моментам. В Джаве можно составлять на подкласс как на экземпляр одного из его суперклассов.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="217" height="30" src="https://otus.ru/journal/wp-content/uploads/2022/06/5-7.jpg" alt="Наследование в программировании на примере C++ и Java" class="wp-image-3835" srcset="https://otus.ru/journal/wp-content/uploads/2022/06/5-7.jpg 217w, https://otus.ru/journal/wp-content/uploads/2022/06/5-7-150x21.jpg 150w" sizes="(max-width: 217px) 100vw, 217px" /></figure>
<p>Сначала здесь будет создан экземпляр авто, затем он присваивается переменной типа Vehicle. Далее ссылка будет указывать на соответствующий экземпляр.</p>
<p>Приведение типа – это процесс ссылки на объект класса как тип, отличный от самого class a. Объект «перебрасывается» из одного вида в другой.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Upcasting_%D0%B8_Downcasting"></span>Upcasting и Downcasting<span class="ez-toc-section-end"></span></h3>
<p>При разработке можно привести объект подкласса к одному из его superclass. К этому моменту пользователь должен уже хорошо разбираться в правах доступа, включая public.</p>
<p>Объект «наследника» может быть приведен к:</p>
<ul><li>одному из его «родителей»;</li><li>из типа superclass к типу подкласса, если объект действительно выступает его экземпляром.</li></ul>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="292" height="106" src="https://otus.ru/journal/wp-content/uploads/2022/06/6-7.jpg" alt="Наследование в программировании на примере C++ и Java" class="wp-image-3836" srcset="https://otus.ru/journal/wp-content/uploads/2022/06/6-7.jpg 292w, https://otus.ru/journal/wp-content/uploads/2022/06/6-7-150x54.jpg 150w" sizes="(max-width: 292px) 100vw, 292px" /></figure>
<p>Приведенный пример downcasting будет действителен. А <a href="https://youtu.be/gv_IoFyJ6m8" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">здесь<span class="wpel-icon wpel-image wpel-icon-6"></span></a> можно посмотреть туториал по наследованию классов.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%B0%D0%BA_%D0%BB%D1%83%D1%87%D1%88%D0%B5_%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D1%8C_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81"></span>Как лучше понять процесс<span class="ez-toc-section-end"></span></h2>
<p>Рассматривать соответствующую тему в «голой теории» — не лучшее решение. Понятия public и private можно изучить «только на бумаге». В случае с более сложными компонентами огромную роль играет практика. А еще – грамотно подобранный материал.</p>
<p><a href="https://youtu.be/O7ruEWCa7zc" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Здесь<span class="wpel-icon wpel-image wpel-icon-6"></span></a> рассказывается о выбранном направлении в ООП в общих чертах. А <a href="https://youtu.be/cQxJR22Zx8s" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">тут<span class="wpel-icon wpel-image wpel-icon-6"></span></a> – основы для C++.</p>
<p>Необходимые знания можно получить при помощи самообразования, а также обучаясь в техникуме или ВУЗе на направлении «программирование». Там рассказывают о наследовании в Java и других ЯП, разбирая процесс «с нуля».</p>
<p>Но лучшее решение – это дистанционные компьютерные курсы. Пользователи смогут заниматься тогда, когда им удобно. Программы рассчитаны как на новичков, так и на опытных разработчиков. Можно освоить одновременно несколько направлений в течении года. В конце выдается электронный сертификат, подтверждающий навыки и знания. С такими курсами <a href="https://otus.ru/journal/html-chto-nujno-znat/" data-wpel-link="internal">элементы кода</a> как static void main, superclass, public и другие будут понятны даже новичку.</p>
<figure class="wp-block-image size-large"><a href="https://otus.ru/lessons/cpp-professional/?utm_source=oj&utm_medium=affilate&utm_campaign=cplus" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><img loading="lazy" decoding="async" width="970" height="90" src="https://otus.ru/journal/wp-content/uploads/2022/06/C_970x90-2.png" alt="Наследование в программировании на примере C++ и Java" class="wp-image-3838" srcset="https://otus.ru/journal/wp-content/uploads/2022/06/C_970x90-2.png 970w, https://otus.ru/journal/wp-content/uploads/2022/06/C_970x90-2-300x28.png 300w, https://otus.ru/journal/wp-content/uploads/2022/06/C_970x90-2-150x14.png 150w, https://otus.ru/journal/wp-content/uploads/2022/06/C_970x90-2-768x71.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></a></figure>
<figure class="wp-block-image size-large"><a href="https://otus.ru/lessons/java-specialization/?utm_source=oj&utm_medium=affilate&utm_campaign=java_bandle" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><img loading="lazy" decoding="async" width="970" height="90" src="https://otus.ru/journal/wp-content/uploads/2022/06/JavaSpec_Welcome_970x90-1.png" alt="Наследование в программировании на примере C++ и Java" class="wp-image-3839" srcset="https://otus.ru/journal/wp-content/uploads/2022/06/JavaSpec_Welcome_970x90-1.png 970w, https://otus.ru/journal/wp-content/uploads/2022/06/JavaSpec_Welcome_970x90-1-300x28.png 300w, https://otus.ru/journal/wp-content/uploads/2022/06/JavaSpec_Welcome_970x90-1-150x14.png 150w, https://otus.ru/journal/wp-content/uploads/2022/06/JavaSpec_Welcome_970x90-1-768x71.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></a></figure>
<p></p>
</div><!-- .post-content -->
<div class="the-post-foot cf">
<div class="tag-share cf">
<div class="post-tags"><a href="https://otus.ru/journal/tag/c/" rel="tag" data-wpel-link="internal">c++</a><a href="https://otus.ru/journal/tag/java/" rel="tag" data-wpel-link="internal">Java</a></div>
<div class="post-share">
<div class="post-share-icons cf">
<span class="counters">
</span>
<a href="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fotus.ru%2Fjournal%2Fnasledovanie-v-programmirovanii-na-primere-c-i-java%2F" class="link facebook wpel-icon-right" target="_blank" title="Share on Facebook" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-facebook"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fnasledovanie-v-programmirovanii-na-primere-c-i-java%2F&text=%D0%9D%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B2%20%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8%20%D0%BD%D0%B0%20%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B5%20C%2B%2B%20%D0%B8%20Java" class="link twitter wpel-icon-right" target="_blank" title="Share on Twitter" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-twitter"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fotus.ru%2Fjournal%2Fnasledovanie-v-programmirovanii-na-primere-c-i-java%2F" class="link linkedin wpel-icon-right" target="_blank" title="LinkedIn" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-linkedin"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fnasledovanie-v-programmirovanii-na-primere-c-i-java%2F&media=https%3A%2F%2Fotus.ru%2Fjournal%2Fwp-content%2Fuploads%2F2022%2F06%2Foj-1080x720-11.png&description=%D0%9D%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B2%20%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8%20%D0%BD%D0%B0%20%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B5%20C%2B%2B%20%D0%B8%20Java" class="link pinterest wpel-icon-right" target="_blank" title="Pinterest" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-pinterest-p"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
</div>
</div>
</div>
<div class="post-nav">
<div class="post previous cf">
<a href="https://otus.ru/journal/peremennye-dlya-yazyka-programmirovaniya-s/" title="Prev Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-left"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/peremennye-dlya-yazyka-programmirovaniya-s/" class="image-link" rel="previous" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Переменные для языка программирования С++" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-9-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-9-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-9-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-9-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-9-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-9-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-9-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-9.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-9-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Переменные для языка программирования С++" /> </a>
<div class="post-meta">
<span class="label">Prev Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/peremennye-dlya-yazyka-programmirovaniya-s/" data-wpel-link="internal">Переменные для языка программирования С++</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/peremennye-dlya-yazyka-programmirovaniya-s/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2022-06-21T18:09:00+00:00">21 июня, 2022</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">5 Mins Read</span>
</div>
</div> </div>
</span>
</div>
<div class="post next cf">
<a href="https://otus.ru/journal/metodologii-razrabotki-kak-mozhno-sozdavat-kontent/" title="Next Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-right"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/metodologii-razrabotki-kak-mozhno-sozdavat-kontent/" class="image-link" rel="next" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Методологии разработки: как можно создавать контент" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-12-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-12-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-12-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-12-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-12-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-12-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-12-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-12.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2022/06/oj-1080x720-12-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Методологии разработки: как можно создавать контент" /> </a>
<div class="post-meta">
<span class="label">Next Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/metodologii-razrabotki-kak-mozhno-sozdavat-kontent/" data-wpel-link="internal">Методологии разработки: как можно создавать контент</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/metodologii-razrabotki-kak-mozhno-sozdavat-kontent/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2022-06-21T18:44:27+00:00">21 июня, 2022</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">10 Mins Read</span>
</div>
</div> </div>
</span>
</div>
</div>
<section class="related-posts grid-3">
<h4 class="section-head"><span class="title">Читать ещё</span></h4>
<div class="ts-row posts cf">
<article class="post col-4">
<a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" title="Уровень готовности CTO к 2026" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Уровень готовности CTO к 2026" title="Уровень готовности CTO к 2026" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" class="post-link" data-wpel-link="internal">Уровень готовности CTO к 2026</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-16T19:50:59+00:00">16 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" title="Новые уроки ноября: только топ-темы по программированию" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Новые уроки ноября: только топ-темы по программированию" title="Новые уроки ноября: только топ-темы по программированию" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" class="post-link" data-wpel-link="internal">Новые уроки ноября: только топ-темы по программированию</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-09T23:24:11+00:00">9 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/schjot-idjot-na-chasy/" title="Счёт идёт на часы" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Счёт идёт на часы" title="Счёт идёт на часы" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-370x245.png 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/schjot-idjot-na-chasy/" class="post-link" data-wpel-link="internal">Счёт идёт на часы</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-10-30T15:04:59+00:00">30 октября, 2025</time>
</div>
</div>
</article >
</div>
</section>
</article> <!-- .the-post -->
</div>
<aside class="col-4 sidebar">
<div class="inner">
<ul>
<li id="search-2" class="widget widget_search"><h5 class="widget-title"><span>Поиск по блогу</span></h5>
<form method="get" class="search-form" action="https://otus.ru/journal/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Введите запрос и нажмите Enter" value="" name="s" title="Search for:" />
</label>
<button type="submit" class="search-submit"><i class="fa fa-search"></i></button>
</form>
</li>
<li id="tag_cloud-5" class="widget widget_tag_cloud"><h5 class="widget-title"><span>Метки</span></h5><div class="tagcloud"><a href="https://otus.ru/journal/tag/android-2/" class="tag-cloud-link tag-link-74 tag-link-position-1" style="font-size: 12.472222222222pt;" aria-label="Android (34 элемента)" data-wpel-link="internal">Android</a>
<a href="https://otus.ru/journal/tag/c-3/" class="tag-cloud-link tag-link-91 tag-link-position-2" style="font-size: 10.916666666667pt;" aria-label="C (23 элемента)" data-wpel-link="internal">C</a>
<a href="https://otus.ru/journal/tag/c-2/" class="tag-cloud-link tag-link-81 tag-link-position-3" style="font-size: 12.666666666667pt;" aria-label="C# (35 элементов)" data-wpel-link="internal">C#</a>
<a href="https://otus.ru/journal/tag/c/" class="tag-cloud-link tag-link-20 tag-link-position-4" style="font-size: 12.472222222222pt;" aria-label="c++ (34 элемента)" data-wpel-link="internal">c++</a>
<a href="https://otus.ru/journal/tag/computer-science/" class="tag-cloud-link tag-link-209 tag-link-position-5" style="font-size: 15.972222222222pt;" aria-label="computer science (78 элементов)" data-wpel-link="internal">computer science</a>
<a href="https://otus.ru/journal/tag/css/" class="tag-cloud-link tag-link-288 tag-link-position-6" style="font-size: 8.6805555555556pt;" aria-label="CSS (13 элементов)" data-wpel-link="internal">CSS</a>
<a href="https://otus.ru/journal/tag/data-science/" class="tag-cloud-link tag-link-151 tag-link-position-7" style="font-size: 8pt;" aria-label="Data Science (11 элементов)" data-wpel-link="internal">Data Science</a>
<a href="https://otus.ru/journal/tag/devops/" class="tag-cloud-link tag-link-98 tag-link-position-8" style="font-size: 10.138888888889pt;" aria-label="devops (19 элементов)" data-wpel-link="internal">devops</a>
<a href="https://otus.ru/journal/tag/docker/" class="tag-cloud-link tag-link-143 tag-link-position-9" style="font-size: 8.2916666666667pt;" aria-label="Docker (12 элементов)" data-wpel-link="internal">Docker</a>
<a href="https://otus.ru/journal/tag/gamedev/" class="tag-cloud-link tag-link-25 tag-link-position-10" style="font-size: 11.694444444444pt;" aria-label="gamedev (28 элементов)" data-wpel-link="internal">gamedev</a>
<a href="https://otus.ru/journal/tag/hr/" class="tag-cloud-link tag-link-103 tag-link-position-11" style="font-size: 8pt;" aria-label="hr (11 элементов)" data-wpel-link="internal">hr</a>
<a href="https://otus.ru/journal/tag/html/" class="tag-cloud-link tag-link-217 tag-link-position-12" style="font-size: 11.208333333333pt;" aria-label="HTML (25 элементов)" data-wpel-link="internal">HTML</a>
<a href="https://otus.ru/journal/tag/ios/" class="tag-cloud-link tag-link-101 tag-link-position-13" style="font-size: 8.9722222222222pt;" aria-label="iOS (14 элементов)" data-wpel-link="internal">iOS</a>
<a href="https://otus.ru/journal/tag/it/" class="tag-cloud-link tag-link-50 tag-link-position-14" style="font-size: 10.527777777778pt;" aria-label="IT (21 элемент)" data-wpel-link="internal">IT</a>
<a href="https://otus.ru/journal/tag/java/" class="tag-cloud-link tag-link-75 tag-link-position-15" style="font-size: 15.680555555556pt;" aria-label="Java (73 элемента)" data-wpel-link="internal">Java</a>
<a href="https://otus.ru/journal/tag/javascript/" class="tag-cloud-link tag-link-83 tag-link-position-16" style="font-size: 14.319444444444pt;" aria-label="JavaScript (53 элемента)" data-wpel-link="internal">JavaScript</a>
<a href="https://otus.ru/journal/tag/linux/" class="tag-cloud-link tag-link-141 tag-link-position-17" style="font-size: 11.888888888889pt;" aria-label="Linux (29 элементов)" data-wpel-link="internal">Linux</a>
<a href="https://otus.ru/journal/tag/machine-learning/" class="tag-cloud-link tag-link-167 tag-link-position-18" style="font-size: 8.6805555555556pt;" aria-label="Machine Learning (13 элементов)" data-wpel-link="internal">Machine Learning</a>
<a href="https://otus.ru/journal/tag/otus-book/" class="tag-cloud-link tag-link-261 tag-link-position-19" style="font-size: 9.9444444444444pt;" aria-label="otus book (18 элементов)" data-wpel-link="internal">otus book</a>
<a href="https://otus.ru/journal/tag/php/" class="tag-cloud-link tag-link-45 tag-link-position-20" style="font-size: 10.527777777778pt;" aria-label="PHP (21 элемент)" data-wpel-link="internal">PHP</a>
<a href="https://otus.ru/journal/tag/python/" class="tag-cloud-link tag-link-27 tag-link-position-21" style="font-size: 16.944444444444pt;" aria-label="Python (99 элементов)" data-wpel-link="internal">Python</a>
<a href="https://otus.ru/journal/tag/qa/" class="tag-cloud-link tag-link-155 tag-link-position-22" style="font-size: 11.402777777778pt;" aria-label="qa (26 элементов)" data-wpel-link="internal">qa</a>
<a href="https://otus.ru/journal/tag/sql/" class="tag-cloud-link tag-link-38 tag-link-position-23" style="font-size: 12.861111111111pt;" aria-label="SQL (37 элементов)" data-wpel-link="internal">SQL</a>
<a href="https://otus.ru/journal/tag/team-lead/" class="tag-cloud-link tag-link-364 tag-link-position-24" style="font-size: 9.9444444444444pt;" aria-label="team lead (18 элементов)" data-wpel-link="internal">team lead</a>
<a href="https://otus.ru/journal/tag/unity/" class="tag-cloud-link tag-link-24 tag-link-position-25" style="font-size: 8pt;" aria-label="unity (11 элементов)" data-wpel-link="internal">unity</a>
<a href="https://otus.ru/journal/tag/algoritmy/" class="tag-cloud-link tag-link-30 tag-link-position-26" style="font-size: 9.9444444444444pt;" aria-label="Алгоритмы (18 элементов)" data-wpel-link="internal">Алгоритмы</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh/" class="tag-cloud-link tag-link-40 tag-link-position-27" style="font-size: 10.138888888889pt;" aria-label="Базы данных (19 элементов)" data-wpel-link="internal">Базы данных</a>
<a href="https://otus.ru/journal/tag/matematika/" class="tag-cloud-link tag-link-44 tag-link-position-28" style="font-size: 10.916666666667pt;" aria-label="Математика (23 элемента)" data-wpel-link="internal">Математика</a>
<a href="https://otus.ru/journal/tag/arhitektura-po/" class="tag-cloud-link tag-link-10 tag-link-position-29" style="font-size: 9.4583333333333pt;" aria-label="архитектура ПО (16 элементов)" data-wpel-link="internal">архитектура ПО</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh-2/" class="tag-cloud-link tag-link-251 tag-link-position-30" style="font-size: 10.138888888889pt;" aria-label="базы данных (19 элементов)" data-wpel-link="internal">базы данных</a>
<a href="https://otus.ru/journal/tag/vebinar/" class="tag-cloud-link tag-link-201 tag-link-position-31" style="font-size: 13.930555555556pt;" aria-label="вебинар (48 элементов)" data-wpel-link="internal">вебинар</a>
<a href="https://otus.ru/journal/tag/dajdzhest/" class="tag-cloud-link tag-link-308 tag-link-position-32" style="font-size: 10.722222222222pt;" aria-label="дайджест (22 элемента)" data-wpel-link="internal">дайджест</a>
<a href="https://otus.ru/journal/tag/zapis-vebinara/" class="tag-cloud-link tag-link-226 tag-link-position-33" style="font-size: 14.902777777778pt;" aria-label="запись вебинара (61 элемент)" data-wpel-link="internal">запись вебинара</a>
<a href="https://otus.ru/journal/tag/zapis-uroka/" class="tag-cloud-link tag-link-272 tag-link-position-34" style="font-size: 16.069444444444pt;" aria-label="запись урока (80 элементов)" data-wpel-link="internal">запись урока</a>
<a href="https://otus.ru/journal/tag/informacionnaya-bezopasnost/" class="tag-cloud-link tag-link-232 tag-link-position-35" style="font-size: 10.138888888889pt;" aria-label="информационная безопасность (19 элементов)" data-wpel-link="internal">информационная безопасность</a>
<a href="https://otus.ru/journal/tag/karera-v-it/" class="tag-cloud-link tag-link-292 tag-link-position-36" style="font-size: 9.9444444444444pt;" aria-label="карьера в IT (18 элементов)" data-wpel-link="internal">карьера в IT</a>
<a href="https://otus.ru/journal/tag/podborka/" class="tag-cloud-link tag-link-7 tag-link-position-37" style="font-size: 12.666666666667pt;" aria-label="подборка (35 элементов)" data-wpel-link="internal">подборка</a>
<a href="https://otus.ru/journal/tag/podborka-statej/" class="tag-cloud-link tag-link-219 tag-link-position-38" style="font-size: 15.777777777778pt;" aria-label="подборка статей (75 элементов)" data-wpel-link="internal">подборка статей</a>
<a href="https://otus.ru/journal/tag/programmirovanie/" class="tag-cloud-link tag-link-65 tag-link-position-39" style="font-size: 22pt;" aria-label="программирование (332 элемента)" data-wpel-link="internal">программирование</a>
<a href="https://otus.ru/journal/tag/proekt/" class="tag-cloud-link tag-link-321 tag-link-position-40" style="font-size: 11.888888888889pt;" aria-label="проект (29 элементов)" data-wpel-link="internal">проект</a>
<a href="https://otus.ru/journal/tag/proektnaya-rabota/" class="tag-cloud-link tag-link-310 tag-link-position-41" style="font-size: 11.597222222222pt;" aria-label="проектная работа (27 элементов)" data-wpel-link="internal">проектная работа</a>
<a href="https://otus.ru/journal/tag/seti/" class="tag-cloud-link tag-link-181 tag-link-position-42" style="font-size: 12.958333333333pt;" aria-label="сети (38 элементов)" data-wpel-link="internal">сети</a>
<a href="https://otus.ru/journal/tag/testirovanie/" class="tag-cloud-link tag-link-69 tag-link-position-43" style="font-size: 13.930555555556pt;" aria-label="тестирование (48 элементов)" data-wpel-link="internal">тестирование</a>
<a href="https://otus.ru/journal/tag/upravlenie-komandoj/" class="tag-cloud-link tag-link-63 tag-link-position-44" style="font-size: 11.694444444444pt;" aria-label="управление командой (28 элементов)" data-wpel-link="internal">управление командой</a>
<a href="https://otus.ru/journal/tag/habr-2/" class="tag-cloud-link tag-link-203 tag-link-position-45" style="font-size: 13.930555555556pt;" aria-label="хабр (48 элементов)" data-wpel-link="internal">хабр</a></div>
</li>
</ul>
</div>
</aside>
</div> <!-- .ts-row -->
</div> <!-- .main -->
<footer class="main-footer dark bold">
<section class="lower-footer cf">
<div class="wrap">
<div class="links">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov-1" class="menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
<p class="copyright"> © 2015-2026 OTUS </p>
<div class="to-top">
<a href="#" class="back-to-top"><i class="fa fa-angle-up"></i> Top</a>
</div>
</div>
</section>
</footer>
</div> <!-- .main-wrap -->
<div class="mobile-menu-container off-canvas" id="mobile-menu">
<a href="#" class="close"><i class="fa fa-times"></i></a>
<div class="logo">
</div>
<ul class="mobile-menu"></ul>
</div>
<div class="search-modal-wrap">
<div class="search-modal-box" role="dialog" aria-modal="true">
<form method="get" class="search-form" action="https://otus.ru/journal/">
<input type="search" class="search-field" name="s" placeholder="Search..." value="" required />
<button type="submit" class="search-submit visuallyhidden">Submit</button>
<p class="message">
Type above and press <em>Enter</em> to search. Press <em>Esc</em> to cancel. </p>
</form>
</div>
</div>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/js/url-span.js" id="wbcr-comments-plus-url-span-js"></script>
<script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"30"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js" id="ez-toc-js-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/custom-script.js" id="custom-script-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/magnific-popup.js" id="magnific-popup-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.fitvids.js" id="jquery-fitvids-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/imagesloaded.min.js" id="imagesloaded-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/object-fit-images.js" id="object-fit-images-js"></script>
<script type="text/javascript" id="contentberg-theme-js-extra">
/* <![CDATA[ */
var Bunyad = {"custom_ajax_url":"\/journal\/nasledovanie-v-programmirovanii-na-primere-c-i-java\/"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theme.js" id="contentberg-theme-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theia-sticky-sidebar.js" id="theia-sticky-sidebar-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.slick.js" id="jquery-slick-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jarallax.js" id="jarallax-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/masonry.min.js" id="masonry-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.masonry.min.js" id="jquery-masonry-js"></script>
</body>
</html>
<!-- Cache served by breeze CACHE - Last modified: Tue, 10 Mar 2026 16:25:49 GMT -->