Woebei die Klasse da nichtmal ein Interface ist, laut dem gezeigten Beispiel.
Weil die Klasse das Interface zwar
implementieren, aber es nicht auch noch
unterstützen muss.
Das
implements
ist sogar noch flexibler:
Die Klasse, die bei dem
implements
steht, muss gar nicht das gesamte Interface implementieren. Es genügt, wenn die fehlenden Methoden von der Wrapper-Klasse implementiert werden.
Delphi-Quellcode:
type
IMyInterface = interface
procedure Foo;
procedure Bar;
end;
TMyClass = class
protected
procedure Foo;
end;
TMySuperClass = class(TInterfacedObject, IMyInterface)
private
FMyClass: TMyClass;
function GetMyClass: TMyClass;
protected
procedure Bar;
property MyClass: TMyClass read GetMyClass implements IMyInterface;
public
destructor Destroy; override;
end;
Das geht sogar noch weiter: Sollten beide Klassen eine Methode des Interfaces implementieren, dann hat die Implementation der Wrapper-Klasse Vorrang.
Delphi-Quellcode:
type
IMyInterface = interface
procedure Foo;
procedure Bar;
end;
TMyClass = class
protected
procedure Foo;
procedure Bar;
end;
TMySuperClass = class(TInterfacedObject, IMyInterface)
private
FMyClass: TMyClass;
function GetMyClass: TMyClass;
protected
procedure Bar; // hat Vorrang for MyClass.Bar
property MyClass: TMyClass read GetMyClass implements IMyInterface;
public
destructor Destroy; override;
end;