Code
unit Unit1; interface uses
Classes, Controls, Forms, Dialogs, StdCtrls; type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
procedure proc1; virtual;
procedure proc2;
end;
procedure proc1; override;
procedure proc2;
end; var
Form1: TForm1; implementation {$R *.dfm} { TBase } procedure TBase.proc1;
begin
ShowMessage('B1');
end; procedure TBase.proc2;
begin
ShowMessage('B2');
end; { TChild } procedure TChild.proc1;
begin
//inherited;
ShowMessage('C1');
end; procedure TChild.proc2;
begin
ShowMessage('C2');
end; procedure TForm1.Button1Click(Sender: TObject);
var
B: TBase;
C: TChild;
BC: TBase;
begin
B := TBase.Create;
C := TChild.Create;
BC := TChild.Create;
B.proc2; //B2
TChild(B).proc1; //B1
TChild(B).proc2; //C2
C.proc2; //C2
TBase(C).proc1; //C1
TBase(C).proc2; //B2
BC.proc2; //B2
TBase(BC).proc1; //C1
TBase(BC).proc2; //B2
TChild(BC).proc1; //C1
TChild(BC).proc2; //C2
unit Unit1; interface uses
Classes, Controls, Forms, Dialogs, StdCtrls; type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
TBase
= classprocedure proc1; virtual;
procedure proc2;
end;
TChild
= class(TBase)procedure proc1; override;
procedure proc2;
end; var
Form1: TForm1; implementation {$R *.dfm} { TBase } procedure TBase.proc1;
begin
ShowMessage('B1');
end; procedure TBase.proc2;
begin
ShowMessage('B2');
end; { TChild } procedure TChild.proc1;
begin
//inherited;
ShowMessage('C1');
end; procedure TChild.proc2;
begin
ShowMessage('C2');
end; procedure TForm1.Button1Click(Sender: TObject);
var
B: TBase;
C: TChild;
BC: TBase;
begin
B := TBase.Create;
C := TChild.Create;
BC := TChild.Create;
B.proc1;
//B1B.proc2; //B2
TChild(B).proc1; //B1
TChild(B).proc2; //C2
C.proc1;
//C1C.proc2; //C2
TBase(C).proc1; //C1
TBase(C).proc2; //B2
BC.proc1;
//C1BC.proc2; //B2
TBase(BC).proc1; //C1
TBase(BC).proc2; //B2
TChild(BC).proc1; //C1
TChild(BC).proc2; //C2
B.Free;
C.Free;
BC.Free;