付費(fèi)下載
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
詳細(xì)解析Java中抽象類(lèi)和接口的區(qū)2007-09-2812:17來(lái)源:整理作者:doublel責(zé)任編輯:方舟·yesky評(píng)論在Java語(yǔ)言中, class和interface是支持抽象類(lèi)定義的兩種機(jī)制。正是由于這兩種機(jī)制的存在,才賦予了Java強(qiáng)大的面向?qū)ο竽芰Α?class和interface者在進(jìn)行抽象類(lèi)定義時(shí)對(duì)于 class和interface的選擇顯得比較隨意。其實(shí),兩者之間還是有很大的區(qū)別的,對(duì)于它們的選擇甚至反映出對(duì)于問(wèn)題領(lǐng)域本質(zhì)的理解、對(duì)于設(shè)理解class和interface在Java語(yǔ)言中都是用來(lái)進(jìn)行抽象類(lèi)(本文中的抽象類(lèi)并 class翻譯而來(lái),它表示的是一個(gè)抽象體,而 class為Java語(yǔ)言中用于定義抽象類(lèi)的法,請(qǐng)讀者注意區(qū)分)定義的,那么什么是抽象類(lèi),使用抽象類(lèi)OCP的讀者一定知道,為了能夠?qū)崿F(xiàn)面向?qū)ο笤O(shè)計(jì)的一個(gè)最的原則OCP(Open-ClosedPrinciple),抽象類(lèi)是其中的關(guān)鍵所從語(yǔ)法定義層面 class和在語(yǔ)法層面,Java語(yǔ)言對(duì)于 class和interface給出了不同的定義方式,下面以定義一個(gè)名為Demo的抽象類(lèi)為例來(lái)說(shuō)明這種不同。使 class的方式定義Demo抽象類(lèi)的方式如下classvoidmethod1();void…}interfaceDemointerfaceinterfaceDemo{voidmethod1();void…} class方式中,Demo可以有自己的數(shù)據(jù)成員,也可以有非 員方法,而在interface方式的實(shí)現(xiàn)中,Demo只能夠有靜態(tài)的不能被修改的數(shù)據(jù)成員(也就是必須是staticfinal的,不過(guò)在interface中一般不定義數(shù)據(jù)成員),所有的成員方法都 的。從某種意義上說(shuō),interface是一種特殊形式的 從編程的角度來(lái)看 class和interface都可以用來(lái)實(shí)現(xiàn)"designby首先,class在Java語(yǔ)言中表示的是一種繼承關(guān)系,一個(gè)類(lèi)只能使用一次繼承關(guān)系(Java轉(zhuǎn)注)interface。也JavaJava對(duì)于多重繼承的支持方面的一種折中考慮吧。其次,在classinterface在抽象類(lèi)中不能定義默認(rèn)行為還存在另一個(gè)比較嚴(yán)重的問(wèn)題,那就是可能會(huì)造成上的麻煩。因?yàn)槿绻髞?lái)想修改類(lèi)的界面(一般通過(guò) class或者interface來(lái)表示)以適應(yīng)新的情況(比如,添加新的方法或者給已用的方法中添加新的參數(shù))時(shí),就會(huì) class來(lái)實(shí)現(xiàn)的,那么可能就只需要修改定義在 class中的默的每一個(gè)派生類(lèi)中,了"onerule,oneplace"原則,造成代碼重復(fù),同樣不利于以 class和interface間進(jìn)行選擇時(shí)要非常的。從設(shè)計(jì)理念層面 class和 class和interface的區(qū)別,這些層 class和interface class在Java語(yǔ)言中體現(xiàn)了一種繼承關(guān)系,要想使得繼承同的。對(duì)于interface來(lái)說(shuō)則不然,并不要求interface的實(shí)現(xiàn)者和interface定義在概念本質(zhì)上是一致的,僅僅是實(shí)現(xiàn)了interface定義的契約而已。為了使論述便于理解,下面將openclose,此時(shí)我們可以通過(guò)classinterface來(lái)定義使 class方式定義classDoor{voidvoid}interfaceinterfaceinterfaceDoor{voidopen();voidclose();}其他具體的Door類(lèi)型可以extends使用 class方式定義的Door或者implements使用interface方式定義的Door??雌饋?lái)好像使用 class和interface如果現(xiàn)在要求Door還要具有的功能。我們?cè)撊绾卧O(shè)計(jì)針對(duì)該例子的類(lèi)結(jié)構(gòu)(classinterface反映在設(shè)計(jì)理念上的區(qū)別,其他方面無(wú)關(guān)的問(wèn)題都做了簡(jiǎn)化或者忽略)?DooralarmclassDoor{voidopen();voidclose();voidalarm();}interfaceinterfaceDoor{voidopen();voidclose();voidalarm();}那么具有功能的AlarmDoor的定義方式如下classAlarmDoorextendsclassAlarmDoorextendsvoidopen(){…}voidclose(){…}void}classclassAlarmDoorimplementsDoor{voidopen(){…}voidclose(){…}void}這種方法了面向?qū)ο笤O(shè)計(jì)中的一個(gè)原則ISP(InterfaceSegregationPrinciple),在Door的定義中把Door概念本身固有的行為方法和另外一個(gè)概念"器"的Door這個(gè)概念的模塊會(huì)因?yàn)?器"這個(gè)概念的改變(比如:修改alarm方法的參數(shù))而改變,反之依然。既然open、close和alarm屬于兩個(gè)不同的概念,根據(jù)ISP原則應(yīng)該把它們分別定 class方式定義;兩個(gè)概念都使用interface方式定義;一個(gè)概念使用 class方式定義,另一個(gè)概念使用interface方式定義。Java語(yǔ)言不支持多重繼承,所以?xún)蓚€(gè)概念都使用class方式定義interface方式來(lái)定義,那么就反映出兩個(gè)問(wèn)題:1、我們可能沒(méi)有理解清楚問(wèn)題領(lǐng)域,AlarmDoor在概念本質(zhì)上到底是Door還是器?2、如果我們AlarmDoor在Door是一致的,那么我們?cè)趯?shí)現(xiàn)時(shí)就沒(méi)有能夠正確的揭示我們的設(shè)計(jì)意圖,因?yàn)樵谶@兩個(gè)概念的定義上(均使用interface方式定義)反映不出上述含義。如果我們對(duì)于問(wèn)題領(lǐng)域的理解是:AlarmDoorDoor,同時(shí)它有具有報(bào)classJava語(yǔ)言中表示一種繼承關(guān)系,而繼承關(guān)系在本質(zhì)上是"is-a"關(guān)系。所Doorabstarctclass方式來(lái)定義。另外,AlarmDoor又具有功能,說(shuō)明它又能夠完成概念中定義的行為,所以概念可以通過(guò)interface方式定義。如下所示:classDoor{voidopen();voidclassDoor{voidopen();voidclose();}interfaceAlarm{voidalarm();}classAlarmDoorextendsDoorimplementsvoidopen(){…}voidclose(){…}void}設(shè)計(jì)意圖。其實(shí) class表示的是"is-a"關(guān)系,interface表示的是"like-a"關(guān)系,大認(rèn)為AlarmDoor在概念本質(zhì)上是器,同時(shí)又具有Door的功能,那么上述的定義方式小classJava語(yǔ)言中表示的是一種繼承關(guān)系,一個(gè)類(lèi)只能使用一次繼承interface。 class中可以有自己的數(shù)據(jù)成員,也可以有非abstarct的成員方法,而在interface中,只能夠有靜態(tài)的不能被修改的數(shù)據(jù)成員(也就是必須是staticfinal的,不過(guò)在interface中一般不定義數(shù)據(jù)成員),所有的成員方法都是 class和
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年貴陽(yáng)幼兒師范高等專(zhuān)科學(xué)校高職單招職業(yè)適應(yīng)性測(cè)試模擬試題及答案詳細(xì)解析
- 2026年廣西水利電力職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試備考試題及答案詳細(xì)解析
- 2026年河南測(cè)繪職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試備考試題及答案詳細(xì)解析
- 2026年福建莆田市城廂區(qū)常太鎮(zhèn)衛(wèi)生院招聘1人筆試參考題庫(kù)及答案解析
- 2026年長(zhǎng)沙民政職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)考試模擬試題含詳細(xì)答案解析
- 2026年新疆農(nóng)業(yè)職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)考試備考題庫(kù)含詳細(xì)答案解析
- 2026年安徽冶金科技職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能考試備考題庫(kù)含詳細(xì)答案解析
- 2026年黔南民族幼兒師范高等專(zhuān)科學(xué)校單招綜合素質(zhì)筆試參考題庫(kù)含詳細(xì)答案解析
- 2026河北邢臺(tái)臨城縣人民醫(yī)院招聘護(hù)理員2名考試重點(diǎn)題庫(kù)及答案解析
- 2026年博爾塔拉職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能考試模擬試題含詳細(xì)答案解析
- 安全目標(biāo)管理制度煤廠(chǎng)(3篇)
- 云南省玉溪市2025-2026學(xué)年八年級(jí)上學(xué)期1月期末物理試題(原卷版+解析版)
- 車(chē)輛駕駛員崗前培訓(xùn)制度
- 2026年哈爾濱通河縣第一批公益性崗位招聘62人考試參考試題及答案解析
- 就業(yè)協(xié)議書(shū)解約函模板
- 頭部護(hù)理與頭皮健康維護(hù)
- 2026年山東城市服務(wù)職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能考試題庫(kù)附答案詳解
- 研發(fā)部門(mén)員工加班管理細(xì)則
- 高考英語(yǔ)3500單詞表(帶音標(biāo))(亂序版)默寫(xiě)背誦通用版
- LY/T 2456-2015桉樹(shù)豐產(chǎn)林經(jīng)營(yíng)技術(shù)規(guī)程
- GB/T 9414.9-2017維修性第9部分:維修和維修保障
評(píng)論
0/150
提交評(píng)論