5.5. Полиморфизм
____________________________________________________________________
гут быть очень сложными и насчитывать не один десяток, а то и сотен строк кода. Что, надо копировать весь похожий код в каждый из дочерних методов?
Конечно же, нет! Оказывается можно вызывать метод родительского класса с помощью ключевого слова inherited. Например:
function TStudent.GetData: string; begin
Result:= inherited GetData;
Result:= Result + ', группа ' + group;
end;
Здесь сначала вызывается метод родительского класса, а затем добавляется новый код.
5.5.2 Позднее связывание.
Выше мы видели, что для статических методов разрешение связей, т.е. оп-
ределение того, какой именно метод следует вызывать, происходит на этапе компиляции. Но бывают ситуации, когда компилятор не может определить, к
какому объекту (экземпляру класса) относится метод. Рассмотрим пример.
Пусть нам необходимо, чтобы на экран выводилась кроме прежней информа-
ции еще и статус человека, т.е. кто он – студент или преподаватель. Для этого введем новый метод Status. Этот метод будет вызываться из метода
GetData. Во время компиляции неизвестно, объект какого класса вызывает метод Status. Это определяется на этапе выполнения, когда точно известен активный в данный момент объект. Разрешение связей на этапе выполнения на-
зывается поздним связыванием. Для реализации механизма позднего связыва-
ния применяются ключевые слова virtual и override. Метод родительско-
го класса помечается ключевым словом virtual. Методы дочерних классов,