|
||||||||
|
Поведение методов при наследовании
Рассмотрим поведение методов при наследовании, что, без преувеличения, является краеугольным камнем объектно-ориентированного программирования. По тому, какие действия происходят при вызове, методы делятся на три группы: статические (static), виртуальные (virtual) и динамические (dynamic). Вообще говоря, есть и еще одно понятие ? абстрактные (abstract) методы, которые никак не вызываются ? но об этом пойдет разговор дальше. Статические методы, а также поля в объектах-потомках ведут себя одинаково: вы можете без ограничений перекрывать старые имена, и при этом изменять тип методов:
В этом примере разные методы с именем SetData присваивают значения разными полям с именем i. Перекрытое поле предка недоступно в потомке; поэтому, конечно, два одноименных поля с именем i приведены только для примера. Вы много выиграете, если будете присваивать всем идентификаторам в программе осмысленные названия. В Delphi перед именами полей принято ставить символ F (от Field): FLength, FWidth, FMyFileld и т. п. В отличие от поля, внутри других методов перекрытый метод доступен при указании зарезервированного слова inherited. Методы объектов по умолчанию являются статическими ? их адрес определяется еще на стадии компиляции проекта. Они вызываются быстрее всего. Язык C++ позволяет так называемое множественное наследование. В этом случае новый класс может наследовать часть своих элементов от одного родительского класса, а часть ? от другого. Это, наряду с удобствами, зачастую приводит к проблемам. В Object Pascal понятие множественного наследования отсутствует. Если вы хотите, чтобы новый класс объединял свойства нескольких, породите классы-предки один от другого или включите в класс несколько полей, соответствующих этим желаемым классам. Принципиально отличаются от статических виртуальные и динамические методы. Они могут быть так объявлены путем добавления соответствующей директивы virtual или dynamic. Обе эти категории существовали и в прежней версии Borland Pascal. Адрес таких методов определяется во время выполнения программы по специальной таблице. С точки зрения наследования методы этих двух видов одинаковы: они могут быть перекрыты в дочернем классе только одноименными методами, имеющими тот же тип. Рассмотрению виртуальных и динамических методов посвящен следующий раздел.
Для комментария : kadan@grsu.grodno.by | |||||||||||
За содержание страницы отвечает Гончарова М.Н. © Кафедра СПиКБ, 2002-2017 |