在实践中真的会发现更多问题.
unit Unit1;interfaceuses Winapi.Windows,����,ȫ�� Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs;type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); end; IA = Interface function GetName: string; property Name: string read GetName; end; TC1 = class(TInterfacedObject, IA) function GetName: string; virtual; end; TC2 = class(TC1) function GetName: string; override; //覆盖 end; TC3 = class(TC2) function GetName: string; override; //再覆盖 end; TC4 = class(TC3) function GetName: string; override; //再覆盖 end;var Form1: TForm1;implementation{$R *.dfm}{ TC1 }function TC1.GetName: string;begin Result := 'C1';end;{ TC2 }function TC2.GetName: string;begin Result := 'C2';end;{ TC3 }function TC3.GetName: string;begin Result := 'C3';end;{ TC4 }function TC4.GetName: string;begin Result := inherited + '0';end;{测试}procedure TForm1.FormCreate(Sender: TObject);var v1,v2,v3,v4: IA;begin v1 := TC1.Create; v2 := TC2.Create; v3 := TC3.Create; v4 := TC4.Create; ShowMessageFmt('%s, %s, %s, %s', [v1.Name, v2.Name, v3.Name, v4.Name]); //C1, C2, C3, C30end;end.