Переведен стандартный раздел помощи для ключевого слова «VIRTUAL». Рекомендуется к прочтению.
Атрибут VIRTUAL — это атрибут, используемый при описании прототипа метода класса. Определяет, что процедура будет являться виртуальным методом класса.
Это позволяет методам РОДИТЕЛЬСКОГО класса вызывать методы ДОЧЕРНЕГО класса. Атрибут VIRTUAL должен быть объявлен
в обоих прототипах методов: и в родительском и в дочернем классе.
Пример:
OneClass CLASS ! БАЗОВЫЙ класс
BaseProc PROCEDURE(REAL Parm) ! не виртуальный метод
Proc PROCEDURE(REAL Parm),VIRTUAL ! определение виртуального метода
END
TwoClass CLASS(OneClass) ! ДОЧЕРНИЙ класс от базового класса OneClass
Proc PROCEDURE(REAL Parm),VIRTUAL ! определение виртуального метода
END
ClassThree OneClass ! еще один экземпляр БАЗОВОГО класса OneClass
ClassFour TwoClass ! еще один экземпляр класса TwoClass
CODE
OneClass.BaseProc(1) ! процедура BaseProc вызывает процедуру OneClass.Proc
TwoClass.BaseProc(2) ! процедура BaseProc вызывает процедуру TwoClass.Proc
ClassThree.BaseProc(3) ! процедура BaseProc вызывает процедуру OneClass.Proc
ClassFour.BaseProc(4) ! процедура BaseProc вызывает процедуру TwoClass.Proc
OneClass.BaseProc PROCEDURE(REAL Parm)
CODE
SELF.Proc(Parm) ! вызов виртуального метода, вызывается или OneClass.Proc
! или TwoClass.Proc, это зависит от того из какого экземпляра
! класса вызывается BaseProc
OneClass.Proc PROCEDURE(Real Parm)
CODE
message('OneClass',Parm)
TwoClass.Proc PROCEDURE(Real Parm)
CODE
message('TwoClass',Parm)
Комментарии
Несмотря на небольшой объем, пример достаточно хорошо показывает использование полиморфизма. Обратите внимание, что строка TwoClass.BaseProc(2) выполняет метод, который не описан в классе TwoClass, его там нет, он наследуется от класса OneClass. Задача метода BaseProc — вызвать метод Proc.
И вызывается метод класса TwoClass. Это и есть способность наследуемого РОДИТЕЛЬСКОГО метода вызывать методы ДОЧЕРНЕГО класса.
