接口和抽象類(lèi)區(qū)別

接口和抽象類(lèi)區(qū)別

ID:20301084

大?。?2.00 KB

頁(yè)數(shù):23頁(yè)

時(shí)間:2018-10-11

接口和抽象類(lèi)區(qū)別_第1頁(yè)
接口和抽象類(lèi)區(qū)別_第2頁(yè)
接口和抽象類(lèi)區(qū)別_第3頁(yè)
接口和抽象類(lèi)區(qū)別_第4頁(yè)
接口和抽象類(lèi)區(qū)別_第5頁(yè)
資源描述:

《接口和抽象類(lèi)區(qū)別》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)

1、接口和抽象類(lèi)的區(qū)別3.1相同點(diǎn)都不能被直接實(shí)例化,都可以通過(guò)繼承實(shí)現(xiàn)其抽象方法。都是面向抽象編程的技術(shù)基礎(chǔ),實(shí)現(xiàn)了諸多的設(shè)計(jì)模式。3.2不同點(diǎn)接口支持多繼承;抽象類(lèi)不能實(shí)現(xiàn)多繼承。接口只能定義抽象規(guī)則;抽象類(lèi)既可以定義規(guī)則,還可能提供已實(shí)現(xiàn)的成員。接口是一組行為規(guī)范;抽象類(lèi)是一個(gè)不完全的類(lèi),著重族的概念。接口可以用于支持回調(diào);抽象類(lèi)不能實(shí)現(xiàn)回調(diào),因?yàn)槔^承不支持。接口只包含方法、屬性、索引器、事件的簽名,但不能定義字段和包含實(shí)現(xiàn)的方法;抽象類(lèi)可以定義字段、屬性、包含有實(shí)現(xiàn)的方法。接口可以作用于值類(lèi)型和引用類(lèi)型;抽象類(lèi)只能作用于引用類(lèi)型。例如,Struct就可

2、以繼承接口,而不能繼承類(lèi)。通過(guò)相同與不同的比較,我們只能說(shuō)接口和抽象類(lèi),各有所長(zhǎng),但無(wú)優(yōu)略。在實(shí)際的編程實(shí)踐中,我們要視具體情況來(lái)酌情量才,但是以下的經(jīng)驗(yàn)和積累,或許能給大家一些啟示,除了我的一些積累之外,很多都來(lái)源于經(jīng)典,我相信經(jīng)得起考驗(yàn)。所以在規(guī)則與場(chǎng)合中,我們學(xué)習(xí)這些經(jīng)典,最重要的是學(xué)以致用,當(dāng)然我將以一家之言博大家之笑,看官請(qǐng)繼續(xù)。3.3規(guī)則與場(chǎng)合請(qǐng)記住,面向?qū)ο笏枷氲囊粋€(gè)最重要的原則就是:面向接口編程。借助接口和抽象類(lèi),23個(gè)設(shè)計(jì)模式中的很多思想被巧妙的實(shí)現(xiàn)了,我認(rèn)為其精髓簡(jiǎn)單說(shuō)來(lái)就是:面向抽象編程。抽象類(lèi)應(yīng)主要用于關(guān)系密切的對(duì)象,而接口最適合為

3、不相關(guān)的類(lèi)提供通用功能。接口著重于CAN-DO關(guān)系類(lèi)型,而抽象類(lèi)則偏重于IS-A式的關(guān)系;接口多定義對(duì)象的行為;抽象類(lèi)多定義對(duì)象的屬性;接口定義可以使用public、protected、internal和private修飾符,但是幾乎所有的接口都定義為public,原因就不必多說(shuō)了?!敖涌诓蛔儭?,是應(yīng)該考慮的重要因素。所以,在由接口增加擴(kuò)展時(shí),應(yīng)該增加新的接口,而不能更改現(xiàn)有接口。盡量將接口設(shè)計(jì)成功能單一的功能塊,以.NETFramework為例,IDisposable、IDisposable、IComparable、IEquatable、IEnumera

4、ble等都只包含一個(gè)公共方法。接口名稱(chēng)前面的大寫(xiě)字母“I”是一個(gè)約定,正如字段名以下劃線開(kāi)頭一樣,請(qǐng)堅(jiān)持這些原則。在接口中,所有的方法都默認(rèn)為public。如果預(yù)計(jì)會(huì)出現(xiàn)版本問(wèn)題,可以創(chuàng)建“抽象類(lèi)”。例如,創(chuàng)建了狗(Dog)、雞(Chicken)和鴨(Duck),那么應(yīng)該考慮抽象出動(dòng)物(Animal)來(lái)應(yīng)對(duì)以后可能出現(xiàn)風(fēng)馬牛的事情。而向接口中添加新成員則會(huì)強(qiáng)制要求修改所有派生類(lèi),并重新編譯,所以版本式的問(wèn)題最好以抽象類(lèi)來(lái)實(shí)現(xiàn)。從抽象類(lèi)派生的非抽象類(lèi)必須包括繼承的所有抽象方法和抽象訪問(wèn)器的實(shí)實(shí)現(xiàn)。對(duì)抽象類(lèi)不能使用new關(guān)鍵字,也不能被密封,原因是抽象類(lèi)不能被

5、實(shí)例化。在抽象方法聲明中不能使用static或virtual修飾符。*************************************************************************************************************************************************************我想,對(duì)于各位使用面向?qū)ο缶幊陶Z(yǔ)言的程序員來(lái)說(shuō),“接口”這個(gè)名詞一定不陌生,但是不知各位有沒(méi)有這樣的疑惑:接口有什么用途?它和抽象類(lèi)有什么區(qū)別?能不能用抽象類(lèi)代替接口呢?而且,作為

6、程序員,一定經(jīng)常聽(tīng)到“面向接口編程”這個(gè)短語(yǔ),那么它是什么意思?有什么思想內(nèi)涵?和面向?qū)ο缶幊淌鞘裁搓P(guān)系?本文將一一解答這些疑問(wèn)。1.面向接口編程和面向?qū)ο缶幊淌鞘裁搓P(guān)系首先,面向接口編程和面向?qū)ο缶幊滩⒉皇瞧郊?jí)的,它并不是比面向?qū)ο缶幊谈冗M(jìn)的一種獨(dú)立的編程思想,而是附屬于面向?qū)ο笏枷塍w系,屬于其一部分。或者說(shuō),它是面向?qū)ο缶幊腆w系中的思想精髓之一。2.接口的本質(zhì)接口,在表面上是由幾個(gè)沒(méi)有主體代碼的方法定義組成的集合體,有唯一的名稱(chēng),可以被類(lèi)或其他接口所實(shí)現(xiàn)(或者也可以說(shuō)繼承)。它在形式上可能是如下的樣子:interfaceInterfaceName{v

7、oidMethod1();voidMethod2(intpara1);voidMethod3(stringpara2,stringpara3);}那么,接口的本質(zhì)是什么呢?或者說(shuō)接口存在的意義是什么。我認(rèn)為可以從以下兩個(gè)視角考慮:1)接口是一組規(guī)則的集合,它規(guī)定了實(shí)現(xiàn)本接口的類(lèi)或接口必須擁有的一組規(guī)則。體現(xiàn)了自然界“如果你是……則必須能……”的理念。例如,在自然界中,人都能吃飯,即“如果你是人,則必須能吃飯”。那么模擬到計(jì)算機(jī)程序中,就應(yīng)該有一個(gè)IPerson(習(xí)慣上,接口名由“I”開(kāi)頭)接口,并有一個(gè)方法叫Eat(),然后我們規(guī)定,每一個(gè)表示“人”的類(lèi),

8、必須實(shí)現(xiàn)IPerson接口,這就模擬了自然界“如果你是人,則必須能

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。