Полиморфизм

 

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

Свойство, позволяющее называть разные алгоритмические действия одним именем называется полиморфизмом. Для реализации этого свойства одноименный метод в классе родителе должен быть объявлен как виртуальный (директива 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 указывает, что метод потомок замещает одноименный метод родителя.