Вход


Главная страница >> Учебный процесс >> Конспекты >> Delphi. Библиотека визуальных компонентов VCL >> Структура справочника и соглашения >> Наследование. Методы >> Поведение методов при наследовании
Переход на главную страницу

Сервер поддерживается
кафедрой информатики и вычислительной техники ГрГУ
тел. +375-(0)152-445-101
E-mail :
kadan@grsu.grodno.by


[Назад]    [Содержание ]    [Вперед]

  


Поведение методов при наследовании


Рассмотрим поведение методов при наследовании, что, без преувеличения, является краеугольным камнем объектно-ориентированного программирования. По тому, какие действия происходят при вызове, методы делятся на три группы: статические (static), виртуальные (virtual) и динамические (dynamic). Вообще говоря, есть и еще одно понятие ? абстрактные (abstract) методы, которые никак не вызываются ? но об этом пойдет разговор дальше.

Статические методы, а также поля в объектах-потомках ведут себя одинаково:

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

type
══T1stObj = class
════i : Extended;
════procedure SetData(AValue: Extended);
══end;

══T2nd0bj = class(T1stObj)
════i : Integer;
════procedure SetData(AValue: Integer;
══end;

procedure T1stObj.SetData;
begin
══i := v;
end;

procedure T2nd0bj.SetData;
begin
══i := 0;
══inherited SetData(0.99);
end;

В этом примере разные методы с именем SetData присваивают значения разными полям с именем i. Перекрытое поле предка недоступно в потомке; поэтому, конечно, два одноименных поля с именем i приведены только для примера. Вы много выиграете, если будете присваивать всем идентификаторам в программе осмысленные названия. В Delphi перед именами полей принято ставить символ F (от Field): FLength, FWidth, FMyFileld и т. п.

В отличие от поля, внутри других методов перекрытый метод доступен при указании зарезервированного слова inherited. Методы объектов по умолчанию являются статическими ? их адрес определяется еще на стадии компиляции проекта. Они вызываются быстрее всего. Язык C++ позволяет так называемое множественное наследование. В этом случае новый класс может наследовать часть своих элементов от одного родительского класса, а часть ? от другого. Это, наряду с удобствами, зачастую приводит к проблемам. В Object Pascal понятие множественного наследования отсутствует. Если вы хотите, чтобы новый класс объединял свойства нескольких, породите классы-предки один от другого или включите в класс несколько полей, соответствующих этим желаемым классам. Принципиально отличаются от статических виртуальные и динамические методы. Они могут быть так объявлены путем добавления соответствующей директивы virtual или dynamic. Обе эти категории существовали и в прежней версии Borland Pascal. Адрес таких методов определяется во время выполнения программы по специальной таблице. С точки зрения наследования методы этих двух видов одинаковы: они могут быть перекрыты в дочернем классе только одноименными методами, имеющими тот же тип. Рассмотрению виртуальных и динамических методов посвящен следующий раздел.



[Назад]    [Содержание ]    [Вперед]

  


Для комментария : kadan@grsu.grodno.by

  
За содержание страницы отвечает Гончарова М.Н.
©
Кафедра СПиКБ, 2002-2017