Наследование
При наследовании объекты кпасса-потомка получают возможность использования («наследуют») поля и методы кпасса-родителя, что позволяет повторно не определять эти компоненты класса.
При описании кпасса-потомка указывают класс-родитель и дополнительные, определенные только для класса-потомка, поля и методы:
Туре = object()
end;...
Пример 11.1. Разработать класс для реализации объекта Трехмерная комната, который должен реагировать на запрос о площади и объеме комнаты (рис. 11.1).
В параграфе 10.3 уже был определен класс TRoom в модуле Room, который содержал поля для хранения длины и ширины ком
наты, метод инициализации полей и метод определения площади. Построим класс для реализации объекта Трехмерная комната на базе TRoom, добавив поле для хранения высоты комнаты и метод определения объема комнаты V, который обращается к методу Square родительского класса (рис.
11.2). Класс TRoom также должен включать свой метод инициализации объектов для инициализации нового поля height.Разрабатываемая программа должна содержать указание об использовании модуля Room, в котором описан родительский класс TRoom:
Program ex;
Uses Room;
Type TVRoom = object(TRoom)
heighUreal; {поле для хранения высоты}
function V:real; {метод определения объема}
procedure Newlnit(l,w,h:real); {инициализирующий метод} end;
Procedure TVRoom.NewInit;
Begin
Init(l,w); {инициализируем наследуемые поля класса} height:=h; {инициализируем собственное поле класса}
End;
Function TVRoom.
V;Begin
V: =Square * height; {обращаемся к методу базового класса}
End:
Var А:TVRoom;
Begin
A.NewInit(3.4,5.1,2.8);
WriteLn(‘Площадь комнаты =
A.Square:6:2);
WriteLn(‘06beM комнаты = A. V:6:2);
End.
Класс TVRoom, таким образом, включает три поля: length, width и height (рис. 11.3) и четыре метода: Square, Init, Newlnit и V. Все поля и методы доступны как из методов производного класса, так и непосредственно из программы.
Бели программа, работая с объектами класса-потомка, не использует некоторых методов родителя, то в исполняемую программу они не включаются.
Примечание. По правилам Borland Pascal у класса может быть только один родитель, но сколько угодно потомков. Поскольку каждый производный класс добавляет при наследовании свои поля и методы, в иерархии классов по мере удаления от корня дерева иерархии сложность классов и соответственно объектов, которые эти классы реализуют, возрастает. Одновременно возрастает и специализация классов. Наиболее универсальные классы, таким образом, находятся у корня дерева классов.
Операция присваивания объектов родственных классов. В Borland Pascal допустимо присваивание объектам класса-родителя значений объектов класса-потомка. Обратное присваивание не разрешено, так как при его выполнении методом «поле за полем» собственные поля объекта класса-потомка окажутся не определенными.
Например:
Var A:TRoom;
B. TVRoom;...
А:-В; {допустимо}
В:-А;... {недопустимо: ошибка!}
Особенности работы с указателями на объекты родственных классов. По правилам Borland Pascal допустимо указателям на объекты класса- родителя присваивать адреса объектов класса-потомка. Однако при этом указатель на объект базового класса не обеспечивает возможности обращения к полям и методам, объявленным в производном классе (рис. 11.4).
Например:
Рис. 11.4. Обращение к полям класса потомка через указатель на объекты класса-родителя |
Var рС: ATRoom; {указатель на объекты базового класса}
E. TVRoom;... {объект производного класса}
рС:= @Е; {присваиваем указателю на объекты базового класса адрес объекта производного класса}
рСл.height: =2.7; {ошибка, указатель на объекты типа класса-родите- ля не подозревает о существовании поля height класса TVRoom}
В этих случаях приходится явно переопределять тип указателя, используя имя типа указателя (см. параграф 2.5):
Туре р TVRoom= А TVRoom;
Var рС: ATRoom; {указатель на объекты базового класса} E:TVRoom;... {объект производного класса}
рС:= @Е; {присваиваем указателю на объекты базового класса адрес объекта производного класса}
pTVRoom(pC)A.height:=2.7; {явно переопределяем тип указателя}
Еще по теме Наследование:
- § 40 Наследование в боковой линии. – В каких случаях женщина пользуется правом представления. – Наследование в родовом имении сообразно происхождению имения. – Наследование в благоприобретенном имении. – Предпочтение полнородных неполнородным (ст. 1133–1140).
- § 43 Особые порядки наследства. – Наследование и раздел у крестьян по обычаю. – Закон наследования в прибалтийских губерниях.
- § 38 Когда открывается наследство по русскому закону. – Ограничения наследственного права. – Имущество, составляющее предмет наследования. – Отношение наследования по закону к завещанию. – Кто может быть наследником?
- § 35 Поводы к открытию наследства. – Имущества, составляющие наследство. – Способные, неспособные и недостойные к наследованию. – Призвание к наследованию и приобретение наследства. – Договоры о наследстве и предварительный отказ от наследства. – Прямой и непрямой наследник. – Праздное и выморочное наследство.
- § 32 Общие понятия о наследстве и о наследственном преемстве. – Отношение завещания к законному наследованию. – Римское господство завещательного начала и отрицание его в германском праве. – Историческое развитие наследственного порядка в римском праве. – Допущение к наследованию кровных родственников.
- § 41 Наследование родителей. – Наследование супругов. – Выдел указной части. – Особливые преимущества вдового супруга при выделе. – Выдел из имения свекра и тестя. – Свойство права на иск о выделе и переход сего права к наследникам. – Отличия в Черниговской и Полтавской губерниях. – Особливые постановления по разным ведомствам (ст. 1141–1147).
- § 34 Смешанные системы в новейших законодательствах. – Происходящее от различия сих систем различие в порядке раздела и в допущении права представления. – Ограничение наследственного права пределами родства. – Ограничение женщин. – Разделение наследства между родами. – Возвращение подаренного родителями. – Наследование супругов и незаконных детей и родителей. – Закон наследования в Англии.
- Виды наследования.
- § 37 Исторический очерк русского наследственного права. – Первые начала наследования по договорам с греками, по Русской Правде и судебникам. – Влияние родового начала и политической борьбы с боярством на постановления о наследстве. – Отличия в наследовании между поместьями и вотчинами. – Образование вдовьей и дочерней части. – Право женщин-родственниц при мужчинах. – Недоумения о праве представления. – Соединение поместий с вотчинами и указ о единонаследии. – Отмена его. – Причины затруднений и
- II. НАСЛЕДОВАНИЕ
- Глава 13 НАСЛЕДОВАНИЕ
- § 2. НАСЛЕДОВАНИЕ ПО ЗАКОНУ
- § 3. НАСЛЕДОВАНИЕ ПО ЗАВЕЩАНИЮ
- § 2. Наследование по завещанию
- 3. Основания наследования
- Статья 1223. Право на наследование
- Понятие наследования.
- Статья 1258. Очередность наследования по закону
- § 1. Понятие и основания наследования