其实你可以认为接口是一种形式上的虚基类(只有申明,没有实现),所以对于接口,也一样存在着继承的问题。比如说 IDispatch 和
IUnknown,由于IDispatch 是 IUnknown的子类,所以 IDispatch IsA IUnknown,也就是说
IDispatch 具有 IUnknown相似的功能。
Object Pascal中对于 is 和 as 的实现的问题上是比较特殊的。当 as
运算符使用到接口时,其实是操作的它的QueryInterface方法,并且由于QueryInterface使用了AddRef,所以 as
对TObject子类的操作就不同了。而 is 运算符只是通过了 TObject 相应的方法就可以得到(就像是RTTI的功能),显然,接口和
TObject 没有必然的联系,所以 is 运算符不能使用到接口上。但是,这不能否定接口具有继承的能力。
还有一个问题能说明接口继承特性的就是对接口的实现,如果,我们要实现IDispatch接口,必须要实现AddRef、Release、QueryIn
terface这些函数,而这线又都是IUnknown的方法。