Полиморфизм – это возможность использовать одинаковые имена для методов, входящих в различные классы. Класс-потомок может не только дополнять поля и методы класса-родителя, но и заменять методы родителя на новые (заменять поля родителя нельзя). Фактически это означает, что метод с одним названием может в разных объектах выполнять различные действия. При применении метода к объекту используется именно тот метод, который соответствует классу объекта.
Свойство, позволяющее называть разные алгоритмические действия одним именем называется полиморфизмом. Для реализации этого свойства одноименный метод в классе родителе должен быть объявлен как виртуальный (директива Virtual - виртуальный), а одноименный метод в классе потомке должен быть объявлен с директивой override (перекрыть).
Пример. Пусть надо объявить три класса: Tperson – как класс родитель; Tstud и Tprep – как классы потомки класса Tperson.
Type Tperson=Class
Ffam, Fot, Fim : string;
Procedure Info; Virtual;
end;
Tprep = class (Tperson)
Fkaf: string;
Procedure Info; Override;
end;
Tstud = class (Tperson)
FNr:Integer;
Procedure Info; Override;
end;
Здесь директива Virtual позволяет классу потомку произвести замену виртуального метода на свой собственный. Директива Override указывает, что метод потомок замещает одноименный метод родителя.