Unit unit1; interfaceuses windows, messages, sysutils, variants, classes, graphics, controls, forms, dialogs; Type tform1 = Class (tform) Procedure formcreate (Sender: tobject ); private {private Declarations} public {public declarations} end; // class tparent = class protected function myfun (I: integer): integer; dynamic; // dynamic method procedure myproc; virtual; // virtual method end; // subclass tchild = Class (tparent) protected function myfun (I: integer): integer; override; // overwrite procedure myproc; override; // overwrite end; var form1: tform1; implementation {$ R *. DFM} {tparent} function tparent. myfun (I: integer): integer; begin Inc (I); Result: = I; end; Procedure tparent. myproc; begin showmessage ('parent'); end; {tchild} function tchild. myfun (I: integer): integer; begin I: = inherited myfun (I); // call the class method first and the value is + 1. Of course, you can do not call Inc (I ); // subclass + 1 Result: = I; end; Procedure tchild. myproc; begin inherited; // call the husband class method first; of course, do not call showmessage ('child '); end; // Test Procedure tform1.formcreate (Sender: tobject); var P: tparent; C: tchild; begin P: = tparent. create; C: = tchild. create; p. myproc; // parent C. myproc; // parent; tchild showmessage (inttostr (P. myfun (2); // 3 showmessage (inttostr (C. myfun (2); // 4 p. free; C. free; end.