Доброго времени суток, читатели, зрители моего канала programmer's notes.
Приложение 2 к видеоуроку. А здесь первое приложение
Полиморфизм в наследовании
Как я уже неоднократно говорил и писал в данном курсе, полиморфизм представляет собой разную реакцию объекта на разные входные условия. В объектно-ориентированном программировании часто сводят полиморфизм к схожему интерфейсу у разных объектов, которые однако имеют некоторый общий смысл. Примером может служить объекты, описывающие геометрические фигуры. Допустим треугольник и окружность. Их как раз и объединяет то, что это геометрические фигуры. С другой стороны они разные. Но если у объекта треугольник и объекта окружность есть метод, с помощью которого эти фигуры изображаются на экране (например set_fig), то это как раз пример полиморфизма. Методы называются одинаково, потому-что выполняют схожую функцию, но рисуют разные фигуры.
Заметим, что описанные в предыдущем абзаце классы окружностей и треугольников, можно рассматривать дочерними к более общему классу. Класс этот можно назвать классом геометрических фигур. И здесь полиморфизм начинает играть уже совсем другими красками. Если создать в родительском классе пустой метод set_fig(), то в дочерних классах можно переписать его в соответствие с геометрической фигурой. Переопределить метод родительского класса, значит переписать его под тем же именем в дочернем классе.
Ниже показана программа, где представлен пример полиморфизма - переопределение родительского класса.
Результат выполнения программы
['ПЕТРОВ', 'ИВАН', 'ИВАНОВИЧ']
Т.е. worker имеет метод с тем же именем, что у родительского класса, но выполняющий несколько иную работу. Вот это и есть одна сторона полиморфизма в наследовании.
Есть другая сторона полиморфизма. В некоторых случаях нам может потребоваться запустить переопределённый родительский метод. Для этого можно использовать функцию super().
Ниже представлен пример, отличающийся от первого тем, что в дочернем методе вызывается метод родительского класса.
Результат выполнения программы
Петров Иван Иванович
Вызов обычного метода из родительского класса встречается не так уж часто. Чаще вызываются специальные методы, в частности конструкторы. Действительно, в конструкторе обычно происходит инициализация переменных, иногда большого их количества. Повторить множество таких действий в дочернем классе не всегда разумно. Вот для этого и нужна функция super().
Смотрим программу ниже
Результат выполнения программы
1 2 3 100
Всего наилучшего. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.