- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
淺談Interface
Wr
iteBcyode6421
多重繼承
OOP的重點在於繼承,封裝,多型等概念上,其中以繼承最受爭議,尤其是多重繼承與單一繼承,到目前為止,
至少在實作上許多語言都選擇了單一繼承,原因不外乎多重繼承會將整個物件架
構複雜化,為了保留多重繼承的特性,
Interface(介面)的概念就成為最好的選擇,標準的OO繼承課題就是父母與子女之間的關係,子女繼承了父與母的的特性,
此為多重繼承,但我們都知道,現實上子女並不會擁有父母的所有特性及能力,但
在多重繼承概念上,子可以向上轉型為父,
也可以向上轉型為母,而這就是多重繼承受爭議的地方.圖:多重繼承
由上面的圖我們可以發現,子同時繼承了父與母兩個類別,也就是說子擁有了父與母類別所有的
特性,讓我們以一個較簡單的方式來說,當父類別擁有抽煙的特性,那在多重繼承的觀念下
,子類別必然也有抽煙的特性,但我們都知道這並不是絕對的.因此我們需要讓子
類別選擇是否會抽煙,基於這個理由,
我們得把父類別的抽煙特性定義成可覆載,這樣子類別才能選擇是否會抽煙,
如果這類特性不多的話還好,但多的話就很煩人了,所以多重繼承下的結果,必定是很沉重的.
多重繼承的替代品-Interface
Interfac以e支援某種能力(或擁有某種能力)為主體來取代多重繼承,以上面的類別來定義的話,就如下圖:
圖:以Interfac實e作取代繼承
從上圖來看,你可以發現子直接繼承人類別,而不是繼承父或母,那子類別如何擁有父與母的特性呢?例如子類別要擁有抽煙的能力?
上圖中我們稱之為子類別繼承了人類別並實作了抽煙這個介面,我們也可以說子是個人,擁有抽煙的能力,
這樣的做法是否比上面的多重繼承更符合現實呢?呵,我把這個問題留給你,我可不想再一次陷入論戰中,
回到Interface,基本上Interface也擁有了繼承特性,你可以繼承抽煙這個
Interface,並加入新的特性
圖:Interfa繼ce承
ㄜ…我知道這不太雅,呵,你就將就一下吧:)因此我們重新定義一下父母子的關係
圖:實作繼承的Interface
Interfac繼e承與Class繼承是差不多的,只是Interfac繼e承了定義而非實體類別也可以實作多個Interfac例e,如下圖:
DELPHI(PASCAL) 與Interface
基本上DELPHI支援Interface操作,但在DELPHI6之前的操作較不直覺,因此容易造成DELPHI對Interface支援不足的假象,
慶幸的是在DELPHI 6中這個問題已經被解決了,這也使得Interface成為
WebSnap最重要的部份,同時也在VCL中有相當重的戲份,下面是你最常看到的Interface運用:
IMyInterface=interface
[{FE5A34E5-21AB-4120-971B-FDC3241AD55D}]
functionSayHello:string;end;
TMyObject=class(TInterfacedObject,IMyInterface)functionSayHello:string;
end;
TForm1=class(TForm)Button1:TButton;
procedureButton1Click(Sender:TObject);private
procedureDoSayHello(Intf:IMyInterface);
{Privatedeclarations}public
{Publicdeclarations}end;
var
Form1:TForm1;implementation
{$R*.DFM}
functionTMyObject.SayHello:string;begin
Result:=Hello;end;
procedureTForm1.DoSayHello(Intf:IMyInterface);begin
ShowMessage(Intf.SayHello);end;
procedureTForm1.Button1Click(Sender:TObject);var
Obj:TMyObject;Intf:IMyInterface;
begin
Obj:=TMyObject.Create;Intf:=(ObjasIMyInterface);DoSayHello(Intf);
end;
OK,我想這個範例大家都看過了,接下來我們變點不一樣的
typeIMyInterface=interface
[{FE5A34E5-21AB-4120-97
您可能关注的文档
- G代码一览表分析和总结.docx
- HACH哈希在线仪表试剂配方.docx
- have got 与has got分析和总结.docx
- have you got a headache教学设计分析和总结.docx
- HBTS系列混凝土泵故障分析及措施.docx
- HB和HR对照表分析和总结.docx
- HC14中文资料分析和总结.docx
- HcL合成流程图分析和总结.docx
- HCNACloud 题库分析和总结.docx
- HDPE材料的基本理化性能指标如下表.docx
- 甘肃省XB师范大学附属中学2025届高三上学期一模诊断考试地理答案.doc
- 甘肃省XB师范大学附属中学2025届高三上学期一模诊断政治含解析.doc
- 安徽省皖江名校2024-2025学年高一上学期12月联考英语无答案.doc
- 2025年1月八省联考高考综合改革适应性测高三化学陕西山西宁夏青海卷无答案.doc
- 2025年1月八省联考高考综合改革适应性测高三化学四川卷无答案.doc
- 2025年1月八省联考高考综合改革适应性测高三政治陕西山西宁夏青海卷无答案.doc
- 2025年1月内蒙古自治区普通高等学校招生考试适应性测试(八省联考)历史无答案.doc
- 2025年1月内蒙古自治区普通高等学校招生考试适应性测试(八省联考)历史含解析.doc
- 2025年1月四川省普通高等学校招生考试适应性测试(八省联考)历史含解析.doc
- 2025年1月四川省普通高等学校招生考试适应性测试(八省联考)政治无答案.doc
文档评论(0)