下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
詳細(xì)解析Java中抽象類和接口的區(qū)2007-09-2812:17來源:整理作者:doublel責(zé)任編輯:方舟·yesky評論在Java語言中, class和interface是支持抽象類定義的兩種機(jī)制。正是由于這兩種機(jī)制的存在,才賦予了Java強(qiáng)大的面向?qū)ο竽芰Α?class和interface者在進(jìn)行抽象類定義時對于 class和interface的選擇顯得比較隨意。其實,兩者之間還是有很大的區(qū)別的,對于它們的選擇甚至反映出對于問題領(lǐng)域本質(zhì)的理解、對于設(shè)理解class和interface在Java語言中都是用來進(jìn)行抽象類(本文中的抽象類并 class翻譯而來,它表示的是一個抽象體,而 class為Java語言中用于定義抽象類的法,請讀者注意區(qū)分)定義的,那么什么是抽象類,使用抽象類OCP的讀者一定知道,為了能夠?qū)崿F(xiàn)面向?qū)ο笤O(shè)計的一個最的原則OCP(Open-ClosedPrinciple),抽象類是其中的關(guān)鍵所從語法定義層面 class和在語法層面,Java語言對于 class和interface給出了不同的定義方式,下面以定義一個名為Demo的抽象類為例來說明這種不同。使 class的方式定義Demo抽象類的方式如下classvoidmethod1();void…}interfaceDemointerfaceinterfaceDemo{voidmethod1();void…} class方式中,Demo可以有自己的數(shù)據(jù)成員,也可以有非 員方法,而在interface方式的實現(xiàn)中,Demo只能夠有靜態(tài)的不能被修改的數(shù)據(jù)成員(也就是必須是staticfinal的,不過在interface中一般不定義數(shù)據(jù)成員),所有的成員方法都 的。從某種意義上說,interface是一種特殊形式的 從編程的角度來看 class和interface都可以用來實現(xiàn)"designby首先,class在Java語言中表示的是一種繼承關(guān)系,一個類只能使用一次繼承關(guān)系(Java轉(zhuǎn)注)interface。也JavaJava對于多重繼承的支持方面的一種折中考慮吧。其次,在classinterface在抽象類中不能定義默認(rèn)行為還存在另一個比較嚴(yán)重的問題,那就是可能會造成上的麻煩。因為如果后來想修改類的界面(一般通過 class或者interface來表示)以適應(yīng)新的情況(比如,添加新的方法或者給已用的方法中添加新的參數(shù))時,就會 class來實現(xiàn)的,那么可能就只需要修改定義在 class中的默的每一個派生類中,了"onerule,oneplace"原則,造成代碼重復(fù),同樣不利于以 class和interface間進(jìn)行選擇時要非常的。從設(shè)計理念層面 class和 class和interface的區(qū)別,這些層 class和interface class在Java語言中體現(xiàn)了一種繼承關(guān)系,要想使得繼承同的。對于interface來說則不然,并不要求interface的實現(xiàn)者和interface定義在概念本質(zhì)上是一致的,僅僅是實現(xiàn)了interface定義的契約而已。為了使論述便于理解,下面將openclose,此時我們可以通過classinterface來定義使 class方式定義classDoor{voidvoid}interfaceinterfaceinterfaceDoor{voidopen();voidclose();}其他具體的Door類型可以extends使用 class方式定義的Door或者implements使用interface方式定義的Door。看起來好像使用 class和interface如果現(xiàn)在要求Door還要具有的功能。我們該如何設(shè)計針對該例子的類結(jié)構(gòu)(classinterface反映在設(shè)計理念上的區(qū)別,其他方面無關(guān)的問題都做了簡化或者忽略)?DooralarmclassDoor{voidopen();voidclose();voidalarm();}interfaceinterfaceDoor{voidopen();voidclose();voidalarm();}那么具有功能的AlarmDoor的定義方式如下classAlarmDoorextendsclassAlarmDoorextendsvoidopen(){…}voidclose(){…}void}classclassAlarmDoorimplementsDoor{voidopen(){…}voidclose(){…}void}這種方法了面向?qū)ο笤O(shè)計中的一個原則ISP(InterfaceSegregationPrinciple),在Door的定義中把Door概念本身固有的行為方法和另外一個概念"器"的Door這個概念的模塊會因為"器"這個概念的改變(比如:修改alarm方法的參數(shù))而改變,反之依然。既然open、close和alarm屬于兩個不同的概念,根據(jù)ISP原則應(yīng)該把它們分別定 class方式定義;兩個概念都使用interface方式定義;一個概念使用 class方式定義,另一個概念使用interface方式定義。Java語言不支持多重繼承,所以兩個概念都使用class方式定義interface方式來定義,那么就反映出兩個問題:1、我們可能沒有理解清楚問題領(lǐng)域,AlarmDoor在概念本質(zhì)上到底是Door還是器?2、如果我們AlarmDoor在Door是一致的,那么我們在實現(xiàn)時就沒有能夠正確的揭示我們的設(shè)計意圖,因為在這兩個概念的定義上(均使用interface方式定義)反映不出上述含義。如果我們對于問題領(lǐng)域的理解是:AlarmDoorDoor,同時它有具有報classJava語言中表示一種繼承關(guān)系,而繼承關(guān)系在本質(zhì)上是"is-a"關(guān)系。所Doorabstarctclass方式來定義。另外,AlarmDoor又具有功能,說明它又能夠完成概念中定義的行為,所以概念可以通過interface方式定義。如下所示:classDoor{voidopen();voidclassDoor{voidopen();voidclose();}interfaceAlarm{voidalarm();}classAlarmDoorextendsDoorimplementsvoidopen(){…}voidclose(){…}void}設(shè)計意圖。其實 class表示的是"is-a"關(guān)系,interface表示的是"like-a"關(guān)系,大認(rèn)為AlarmDoor在概念本質(zhì)上是器,同時又具有Door的功能,那么上述的定義方式小classJava語言中表示的是一種繼承關(guān)系,一個類只能使用一次繼承interface。 class中可以有自己的數(shù)據(jù)成員,也可以有非abstarct的成員方法,而在interface中,只能夠有靜態(tài)的不能被修改的數(shù)據(jù)成員(也就是必須是staticfinal的,不過在interface中一般不定義數(shù)據(jù)成員),所有的成員方法都是 class和
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 物流中心保潔外包協(xié)議
- 小學(xué)紅領(lǐng)巾創(chuàng)新創(chuàng)業(yè)活動方案
- 高支模項目風(fēng)險評估方案
- 高校心理健康教育評估管理制度
- 餐飲行業(yè)消防安全施工方案
- 2024至2030年中國硫酸氧釩行業(yè)投資前景及策略咨詢研究報告
- 外裝飾吊籃方案
- 2024至2030年中國雜交油菜種子數(shù)據(jù)監(jiān)測研究報告
- 2024至2030年中國沖擊試件削角機(jī)數(shù)據(jù)監(jiān)測研究報告
- 2024至2030年食品級精純白油項目投資價值分析報告
- DB11-T 1028-2021 民用建筑節(jié)能門窗工程技術(shù)標(biāo)準(zhǔn)
- 學(xué)校矛盾糾紛排查化解工作方案(3篇)
- DB11T 585-2020 組織機(jī)構(gòu)、職務(wù)職稱英文譯寫通則
- 靜脈留置針固定及維護(hù)
- 2024-2025學(xué)年浙教版八年級上冊科學(xué)期中模擬卷
- 英語教師比賽方案
- 3.9 辛亥革命 課件- 2024-2025學(xué)年統(tǒng)編版八年級歷史上冊
- 四川省南充市語文小升初試卷及解答參考(2024-2025學(xué)年)
- 教育心理學(xué)-形考作業(yè)1(第一至三章)-國開-參考資料
- 某地產(chǎn)集團(tuán)有限公司檔案歸檔范圍、保管期限及分類表
- 2023-2024學(xué)年北京海淀區(qū)首都師大附中初二(上)期中道法試題及答案
評論
0/150
提交評論