Ich hab gedacht da IDeviceController schon IInterface implementiert, hat TDeviceController das dadurch auch. Ich war mir nicht sicher ob das bei den Interfaces in Delphi mitvererbt wird.
IDeviceController erbt zwar die Methoden von IInterface und somit muss jede Instanz, die IDeviceController unterstützt (Supports), auch diese Methoden implementieren, aber jede Klasse unterstützt genau die Interfaces, die hinter der Parent-Klasse angegeben sind:
TMyClass = class(TObject, IDeviceController)
unterstützt IDeviceController aber nicht IInterface,
TMyClass = class(TObject, IInterface, IDeviceController)
unterstützt IInterface und IDeviceController.
Natürlich wird Interface-Unterstützungg vererbt. Deswegen funktioniert auch
TMyClass = class(TInterfacedObject, IDeviceController)
.
Das erste mag etwas verwundern, wenn man Interface-Vererbung (die ähnlich wie Klassenvererbung funktioniert) und Interface-Unterstützung (das was man mit Supports bzw. QueryInterface abfragt) nicht auseinanderhält. Es handelt sich aber hierbei um zwei verschiedene Dinge.