Переведен стандартный раздел помощи для ключевого слова «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. Это и есть способность наследуемого РОДИТЕЛЬСКОГО метода вызывать методы ДОЧЕРНЕГО класса.