接口的继承
接口可以相互继承,就像类一样。因此,实现类必须实现接口和所有基接口的功能。但是,这样,编译器不知道实现类也实现了基接口,它只知道明确列出的接口。这就是为什么在 TImplementer
上使用 as ISuperInterface
是行不通的原因。这也导致了通常的做法,即明确实现所有基接口(在本例中为 TImplementer = class(TInterfacedObject, IDescendantInterface, ISuperInterface)
)。
ISuperInterface = interface
['{A2437023-7606-4551-8D5A-1709212254AF}']
procedure Method1();
function Method2(): Boolean;
end;
IDescendantInterface = interface(ISuperInterface)
['{6C47FF48-3943-4B53-8D5D-537F4A0DEC0D}']
procedure SetValue(const aValue: TObject);
function GetValue(): TObject;
property Value: TObject read GetValue write SetValue;
end;
TImplementer = class(TInterfacedObject, IDescendantInterface)
// ISuperInterface
procedure Method1();
function Method2(): Boolean;
// IDescendantInterface
procedure SetValue(const aValue: TObject);
function GetValue(): TObject
property Value: TObject read GetValue write SetValue;
end;