都说用接口可以模拟多重继承,但总不明白(100分)

  • 主题发起人 主题发起人 tt_mok
  • 开始时间 开始时间
T

tt_mok

Unregistered / Unconfirmed
GUEST, unregistred user!
比如
TTest=Class(TObject,Ia,Ib)
此类继承自TObject,同时实现两接口
问题是此两接口原来都是没有实际实现的,只有声明,
与多重继承好像不太一样吧,多重继承是可以重用
两个父类的代码的
哪位高手给我讲解一下,谢谢。
 
请参考
http://www.delphibbs.com/delphibbs/dispq.asp?lid=623765
 
你先想什么是多重继承
然后想想用Delphi(不用Interface)怎么实现?
最后想想用Interface怎么实现。

先要知道什么是多重继承才行呀。
 
打个比方说:
父亲会抽烟,母亲会做饭,如果以多重继承的观点孩子必然是又会抽烟也会做饭。
但事实上并非如此。
如果把抽烟和做饭分别做成一个接口,这样父亲可以引用抽烟(实现抽烟方法),
孩子可以选择抽不抽烟(。这就是接口的好处吧。
现有一问题:
抽烟方法已经在父亲类里实现了,孩子类如何调用抽烟接品里的这个方法,也就是:
假设我定义一接口IA,其中有一方法DoA,现在类TA,TB里引用这个接口并分别实现DoA方法。
如果这时在TC类中调用接口IA在TA类中实现的DoA方法,应该如何写代码。
 
接口的多重继承主要在行为上体现。
 
TO MARKNEW:
我想你先应该搞清楚什么是接口?接口是使用者和定义者之间的一种协议,
tmyclass=class(tinterfacedobject,ia,ib)表示tmyclass从tinterfacedobject
继承下来,并实现了ia,ib两个接口;
接口本身只提供了定义,它的实现是通过实现类来实现的;
上面的例子是一个多继承,只要你在TMYCLASS里实现了IA,IB所定义的方法,
你就可以使用这个接口,实际上,没有实现的接口是没有用处的,只是一个定义;
如果你要使用接口IA或IB的方法,参考如下代码:
procedure tform1.example;
var
test:ia;
begin
test:=tmyclass.create;
test.you_define_method;
end;
关于COM,大家可以与我讨论呀,相互交流吧。
cqwjx@163.com
qq:80779728
 
谢谢。好的。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=761011
 
接口就相当于
一种标准,
 
Delphi 是单继承的,要用多继承你应该采用C++,所谓单继承,指子类只能继承
父类的属性,而不能同时继承父类和母类的属性
 
同意nsj的说法
 
应该说你没有搞清楚继承的作用,继承不只是让你少写一些代码的,更重要的是告诉你
子类也是父类的一种,它也会具有父类的操作。而接口可以理解为一种更纯的继承。
 
接口就相当纯虚函数,实现某个接口也就具有的某个特征,
就可以用一个基类指针维护所有的实例
 
另:虚拟与多态,概莫能外
 
我在另一个帖子里写过的 http://www.delphibbs.com/delphibbs/dispq.asp?lid=596317

“实际上应该存在两种继承性。实现继承(implementation inheritance )
表示真正的实现(即行为)被继承;而接口继承( interface inheritance )
则表示只有行为的规范被继承”(引自《COM本质论》)

在 C++ 中,无论是实现继承还是接口继承都存在“多重继承”,而在Delphi
和 Java 中,即使引进了 Interface 也只能替代了接口继承方面的“多重继承”。
 
后退
顶部