I found a (at least for me) unexpected behavior when using interface inheritance in Delphi.
I have this simple class and interface hierarchy:
+------
This might seem a little counter intuitive, but your class must declare that it implements the parent interface, too. Your class declaration must be like so:
TMyObj = class(TInterfacedObject, IMyBase, IMyIntf)
Danny Thorpe, a former Borland engineer, explained the rationale behind this behaviour in an answer to a related question:
If an implementing class does not declare that it supports an inherited interface, then the class will not be assignment compatible with variables of the inherited interface. The code sample you posted should work fine (using the IChild interface), but if you try to assign from an instance of TMyClass to a variable of IParent, then you'll run into trouble.
The reason is because COM and ActiveX allow an implementation to implement a descendent interface (your IChild) but deny the ancestor of that interface (IParent). Since Delphi interfaces are intended to be COM compatible, that's where this goofy artifact comes from.