Наследование (код)
Полезная статья? Пожалуйста, поставьте "+"
Алгоритмизация и программирование - Содержание
Этот простой принцип означает, что если необходимо создать новый класс,
лишь немного отличающийся от уже имеющегося, нет необходимости в
переписывании заново уже существующего кода. Вы объявляете, что новый
класс
tNewClass=class(tOldClass);
является потомком или
дочерним классом класса tOldClass, называемого предком или родительским
классом, и добавляете к нему новые поля методы и свойства.
В
Delphi все классы являются потомками класса tObject. Поэтому, если вы
строите дочерний класс прямо от tObject, то в определении его можно не
упоминать. Следующие два описания одинаково верны:
tMyClass=class(tObject); tMyClass=class;
Более подробно класс tObject будет рассмотрен ниже.
Унаследованные
от класса-предка поля и методы доступны в дочернем классе; если имеет
место совпадение имен методов, говорят, что они перекрываются.
Рассмотрим
поведение методов при наследовании. По тому, какие действия происходят
при вызове, методы делятся на три группы. В первую группу отнесем
статические методы, во вторую - виртуальные (virtual) и динамические
(dynamic) и, наконец, в третью - появившиеся только в Delphi 4
перегружаемые (overload) методы.
Статические методы, а также
любые поля в классах-потомках ведут себя одинаково: можно без
ограничений перекрывать старые имена и при этом менять тип методов. Код
нового статического метода полностью перекрывает (заменяет собой) код
старого метода:
type tFirstClass=class fData:Extended; procedure SetData(aValue:Extended); end;
tSecondClass=class(tFirstClass) fData:Integer; procedure SetData(aValue:Integer); end;
procedure tFirstClass.SetData(aValue:Extended); Begin fData:=1.0; End;
procedure tFirstClass.SetData(aValue:Extended); Begin fData:=1; inherited SetData(0.99); End;
В
этом примере разные методы с именем SetData присваивают значение разным
полям с именем fData. Перекрытое (одноименное) поле предка недоступно в
потомке. Поэтому два одноименных поля с именем fData приведены только
для примера.
В отличие от поля, внутри других методов перекрытый
метод доступен при указании ключевого слова inherited. По умолчанию
методы объектов классов статические - их адрес определяется еще на этапе
компиляции проекта, поэтому они вызываются быстрее всего.
Принципиально
отличаются от статических виртуальные и динамические методы. Они должны
быть объявлены путем добавления соответствующей директивы dynamic или
virtual. С точки зрения наследования методы этих двух категорий
одинаковы: они могут быть перекрыты в дочернем классе только
одноименными методоми, имеющими тот же тип.
|
Категория: Алгоритмизация и программирование | Добавил: Ni-Cd (10 Декабря 2011)
|
Просмотров: 1663
| Рейтинг: 0.0/0 |
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]
|
|
Онлайн |
Онлайн всего: 9 Гостей: 9 Пользователей: 0 |
|
|