Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
прог-шпоры-исходник.doc
Скачиваний:
1
Добавлен:
25.09.2019
Размер:
91.14 Кб
Скачать

18. Переопределение методов:

Метод базового класса может быть переопределен (замещен) в подклассах. Если при этом требуется вызвать метод базового класса, то используется служебное слово inherited.

type

<имя класса1>=class

<описание полей >

procedure <имя метода1>(<параметры>);

begin

<тело метода>

end;

end;

<имя класса2>=class(<имя класса1>)

<описание полей >

procedure <имя метода1>(<параметры>);

inherited <имя метода1>

begin

<тело метода>

end;

end;

Если метод в потомке имеет то же название, что и в базовом классе (с теми же параметрами) и не используя слово inherited, то метод в потомке замещается.

19. Наследование конструкторов:

В PascalABC.NET если класс не определяет конструкторов, то все конструкторы предка автоматически генерируются в потомке, вызывая соответствующие конструкторы предка (можно также говорить, что они наследуются). Если в классе определяются конструкторы, то конструкторы предка не генерируются. Конструктор по умолчанию, если он явно не определен, генерируется автоматически в любом случае и является protected. Если в PascalABC.NET конструктор предка вызывается из конструктора потомка, то этот вызов должен быть первым оператором. Если конструктор предка явно не вызывается из конструктора потомка, то неявно первым оператором в конструкторе потомка вызывается конструктор предка по умолчанию (т.е. без параметров). Если такого конструктора у предка нет (это может быть класс, откомпилированный другим .NET-компилятором или входящий в стандартную библиотеку классов - все классы, откомпилированные PascalABC.NET, имеют конструктор по умолчанию), то возникает ошибка компиляции.

21. Виртуальные методы и полиморфизм:

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

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

Для того чтобы сделать метод виртуальным, следует в объявлении этого метода после заголовка указать ключевое слово virtual с последующей ; . Для переопределения виртуального метода следует использовать ключевое слово override

type

<имя класса1>=class

<описание полей >

procedure <имя метода1>;virtual;

begin

<тело метода>

end;

end;

<имя класса2>=class(<имя класса1>)

<описание полей >

procedure <имя метода1>;override;

begin

<тело метода>

end;

end;

Виртуальные методы связаны в виртуальную цепочку. Чтобы виртуальную цепочку разорвать используется слово reintroduce.

type

<имя класса3>=class(<имя класса2>)

<описание полей >

procedure <имя метода1>;virtual;reintroduce;

begin

<тело метода>

end;

end;

end;