<<
>>

Возможности наследования и полиморфизм

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

Рассмотрим три типовых варианта применения наследования. Положим, у нас есть родительский класс с двумя атрибутами (элементами данных) ра1 и ра2 и двумя операциями (элементами-функциями) ор_а1() и ор_а2(). Этот родитель хочет, чтобы потомок был его точной копией. В этом случае потомок владеет теми же (родительскими) атрибутами и операциями, поэтому секции атрибутов и операций потомка пусты (рис. 16.21). Нет нужды показывать их содержимое — по умолчанию все знают, что там находится «родительское богатство».

Рис.
16.21. Наследник является точной копией родителя

Возможности наследования и полиморфизм

449

Однако второй потомок этого родителя-консерватора взбунтовался и реализовал идею: «я, папа, от твоего наследства не отказываюсь, но хочется чего-то новенького, дополнительного». В итоге наследник добавил себе два атрибута ра3, ра4 и одну новую операцию ор_а3() (рис. 16.22).
Его секции атрибутов и операций не пусты — в них прописаны новые названия.

Рис. 16.22. Наследник наращивает количество атрибутов и операций

Наконец, третий потомок оказался самым требовательным: «я и нового хочу, и от старого отказываюсь (правда, лишь частично)». При реализации этого тезиса он разместил в себе новые атрибуты ра5, ра6, новую операцию ор_а4() и переопределил родительскую операцию ор_а2(), изменив ее содержание (рис. 16.23).

Переопределение родительских операций приводит к тому, что в дереве наследования классов появляются операции с одинаковым заголовком и разными телами — все вместе они образуют так называемую полиморфную операцию. Такая операция имеет много форм, то есть реализаций. На рис. 16.11 уже приводился пример полиморфной операции площадь(). Она появилась в силу переопределения классами-потомками Круг и Квадрат родительской операции, операции класса Точка. Возвращаясь к обсуждению полиморфизма в главе 13, следует сказать, что здесь вводится полиморфизм подтипов.

Для обращения к одной из форм полиморфной операции удобно использовать динамическое связывание. Оно создается на основе полиморфной переменной- указателя.

Полиморфная переменная-указатель привязывается к родительскому классу, после чего может адресовать любой из экземпляров классов-наследников. Например, мы объявляем указатель

Точка *фигура_укз; // полиморфная переменная-указатель на родительский класс

после чего с помощью оператора фигура_укз -> площадь( );

450 Глава 16. Объектно-ориентированное и аспектно-ориентированное программирование

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

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

Рис. 16.23. Наследник наращивает количество атрибутов, операций и переопределяет родительскую операцию

<< | >>

Еще по теме Возможности наследования и полиморфизм:

  1. § 40 Наследование в боковой линии. – В каких случаях женщина пользуется правом представления. – Наследование в родовом имении сообразно происхождению имения. – Наследование в благоприобретенном имении. – Предпочтение полнородных неполнородным (ст. 1133–1140).
  2. § 43 Особые порядки наследства. – Наследование и раздел у крестьян по обычаю. – Закон наследования в прибалтийских губерниях.
  3. § 51 Понятие о выделе и юридические его свойства. – Сходство его с наследованием и с даром. – Ограничения выдела. – Безвозвратность выдела и возможность поворота. – Учет выделенного при открытии наследства. – Отказ от наследства при выделе. – Приданое и рядная запись. – Выдел и приданое по Литовскому статуту. – Примеры и судебная практика.
  4. § 38 Когда открывается наследство по русскому закону. – Ограничения наследственного права. – Имущество, составляющее предмет наследования. – Отношение наследования по закону к завещанию. – Кто может быть наследником?
  5. § 35 Поводы к открытию наследства. – Имущества, составляющие наследство. – Способные, неспособные и недостойные к наследованию. – Призвание к наследованию и приобретение наследства. – Договоры о наследстве и предварительный отказ от наследства. – Прямой и непрямой наследник. – Праздное и выморочное наследство.
  6. § 32 Общие понятия о наследстве и о наследственном преемстве. – Отношение завещания к законному наследованию. – Римское господство завещательного начала и отрицание его в германском праве. – Историческое развитие наследственного порядка в римском праве. – Допущение к наследованию кровных родственников.
  7. § 41 Наследование родителей. – Наследование супругов. – Выдел указной части. – Особливые преимущества вдового супруга при выделе. – Выдел из имения свекра и тестя. – Свойство права на иск о выделе и переход сего права к наследникам. – Отличия в Черниговской и Полтавской губерниях. – Особливые постановления по разным ведомствам (ст. 1141–1147).
  8. § 34 Смешанные системы в новейших законодательствах. – Происходящее от различия сих систем различие в порядке раздела и в допущении права представления. – Ограничение наследственного права пределами родства. – Ограничение женщин. – Разделение наследства между родами. – Возвращение подаренного родителями. – Наследование супругов и незаконных детей и родителей. – Закон наследования в Англии.
  9. Виды наследования.
  10. § 37 Исторический очерк русского наследственного права. – Первые начала наследования по договорам с греками, по Русской Правде и судебникам. – Влияние родового начала и политической борьбы с боярством на постановления о наследстве. – Отличия в наследовании между поместьями и вотчинами. – Образование вдовьей и дочерней части. – Право женщин-родственниц при мужчинах. – Недоумения о праве представления. – Соединение поместий с вотчинами и указ о единонаследии. – Отмена его. – Причины затруднений и
  11. II. НАСЛЕДОВАНИЕ
  12. Глава 13 НАСЛЕДОВАНИЕ
  13. § 2. НАСЛЕДОВАНИЕ ПО ЗАКОНУ
  14. § 3. НАСЛЕДОВАНИЕ ПО ЗАВЕЩАНИЮ
  15. § 2. Наследование по завещанию
  16. 3. Основания наследования
  17. Статья 1223. Право на наследование
  18. Понятие наследования.
  19. Статья 1258. Очередность наследования по закону