国产成人不卡-国产成人不卡亚洲精品91-国产成人成人一区二区-国产成人刺激视频在线观看-国产成人的电影在线观看-国产成人福利

將想法與焦點(diǎn)和您一起共享

Java 抽象與接口理解發(fā)布者:本站     時(shí)間:2020-05-06 15:05:09

abstract class和interface是Java語言中對于抽象類定義進(jìn)行支持的兩種機(jī)制,正是由于這兩種機(jī)制的存在,才賦予了Java強(qiáng)大的面向?qū)ο竽芰Αbstract class和interface之間在對于抽象類定義的支持方面具有很大的相似性,甚至可以相互替換,因此很多開發(fā)者在進(jìn)行抽象類定義時(shí)對于abstract class和interface的選擇顯得比較隨意。其實(shí),兩者之間還是有很大的區(qū)別的,對于它們的選擇甚至反映出對于問題領(lǐng)域本質(zhì)的理解、對于設(shè)計(jì)意圖的理解是否正確、合理。本文將對它們之間的區(qū)別進(jìn)行一番剖析,試圖給開發(fā)者提供一個(gè)在二者之間進(jìn)行選擇的依據(jù)。

理解抽象類

abstract class和interface在Java語言中都是用來進(jìn)行抽象類(本文中的抽象類并非從abstract class翻譯而來,它表示的是一個(gè)抽象體,而abstract class為Java語言中用于定義抽象類的一種方法,請讀者注意區(qū)分)定義的,那么什么是抽象類,使用抽象類能為我們帶來什么好處呢?

在面向?qū)ο蟮母拍钪校覀冎浪械膶ο蠖际峭ㄟ^類來描繪的,但是反過來卻不是這樣。并不是所有的類都是用來描繪對象的,如果一個(gè)類中沒有包含足夠的信息來描繪一個(gè)具體的對象,這樣的類就是抽象類。抽象類往往用來表征我們在對問題領(lǐng)域進(jìn)行分析、設(shè)計(jì)中得出的抽象概念,是對一系列看上去不同,但是本質(zhì)上相同的具體概念的抽象。比如:如果我們進(jìn)行一個(gè)圖形編輯軟件的開發(fā),就會(huì)發(fā)現(xiàn)問題領(lǐng)域存在著圓、三角形這樣一些具體概念,它們是不同的,但是它們又都屬于形狀這樣一個(gè)概念,形狀這個(gè)概念在問題領(lǐng)域是不存在的,它就是一個(gè)抽象概念。正是因?yàn)槌橄蟮母拍钤趩栴}領(lǐng)域沒有對應(yīng)的具體概念,所以用以表征抽象概念的抽象類是不能夠?qū)嵗摹?

在面向?qū)ο箢I(lǐng)域,抽象類主要用來進(jìn)行類型隱藏。我們可以構(gòu)造出一個(gè)固定的一組行為的抽象描述,但是這組行為卻能夠有任意個(gè)可能的具體實(shí)現(xiàn)方式。這個(gè)抽象描述就是抽象類,而這一組任意個(gè)可能的具體實(shí)現(xiàn)則表現(xiàn)為所有可能的派生類。模塊可以操作一個(gè)抽象體。由于模塊依賴于一個(gè)固定的抽象體,因此它可以是不允許修改的;同時(shí),通過從這個(gè)抽象體派生,也可擴(kuò)展此模塊的行為功能。熟悉OCP的讀者一定知道,為了能夠?qū)崿F(xiàn)面向?qū)ο笤O(shè)計(jì)的一個(gè)最核心的原則OCP(Open-Closed Principle),抽象類是其中的關(guān)鍵所在。


從語法定義層面看abstract class和interface

在語法層面,Java語言對于abstract class和interface給出了不同的定義方式,下面以定義一個(gè)名為Demo的抽象類為例來說明這種不同。

使用abstract class的方式定義Demo抽象類的方式如下:

abstract class Demo {
abstract void method1();
abstract void method2();

使用interface的方式定義Demo抽象類的方式如下:

interface Demo {
void method1();
void method2();

}

在abstract class方式中,Demo可以有自己的數(shù)據(jù)成員,也可以有非abstarct的成員方法,而在interface方式的實(shí)現(xiàn)中,Demo只能夠有靜態(tài)的不能被修改的數(shù)據(jù)成員(也就是必須是static final的,不過在interface中一般不定義數(shù)據(jù)成員),所有的成員方法都是abstract的。從某種意義上說,interface是一種特殊形式的abstract class。

從編程的角度來看,abstract class和interface都可以用來實(shí)現(xiàn)"design by contract"的思想。但是在具體的使用上面還是有一些區(qū)別的。

首先,abstract class在Java語言中表示的是一種繼承關(guān)系,一個(gè)類只能使用一次繼承關(guān)系。但是,一個(gè)類卻可以實(shí)現(xiàn)多個(gè)interface。也許,這是Java語言的設(shè)計(jì)者在考慮Java對于多重繼承的支持方面的一種折中考慮吧。

其次,在abstract class的定義中,我們可以賦予方法的默認(rèn)行為。但是在interface的定義中,方法卻不能擁有默認(rèn)行為,為了繞過這個(gè)限制,必須使用委托,但是這會(huì) 增加一些復(fù)雜性,有時(shí)會(huì)造成很大的麻煩。

在抽象類中不能定義默認(rèn)行為還存在另一個(gè)比較嚴(yán)重的問題,那就是可能會(huì)造成維護(hù)上的麻煩。因?yàn)槿绻髞硐胄薷念惖慕缑妫ㄒ话阃ㄟ^abstract class或者interface來表示)以適應(yīng)新的情況(比如,添加新的方法或者給已用的方法中添加新的參數(shù))時(shí),就會(huì)非常的麻煩,可能要花費(fèi)很多的時(shí)間(對于派生類很多的情況,尤為如此)。但是如果界面是通過abstract class來實(shí)現(xiàn)的,那么可能就只需要修改定義在abstract class中的默認(rèn)行為就可以了。

同樣,如果不能在抽象類中定義默認(rèn)行為,就會(huì)導(dǎo)致同樣的方法實(shí)現(xiàn)出現(xiàn)在該抽象類的每一個(gè)派生類中,違反了"one rule,one place"原則,造成代碼重復(fù),同樣不利于以后的維護(hù)。因此,在abstract class和interface間進(jìn)行選擇時(shí)要非常的小心。


從設(shè)計(jì)理念層面看abstract class和interface

上面主要從語法定義和編程的角度論述了abstract class和interface的區(qū)別,這些層面的區(qū)別是比較低層次的、非本質(zhì)的。本小節(jié)將從另一個(gè)層面:abstract class和interface所反映出的設(shè)計(jì)理念,來分析一下二者的區(qū)別。作者認(rèn)為,從這個(gè)層面進(jìn)行分析才能理解二者概念的本質(zhì)所在。

前面已經(jīng)提到過,abstarct class在Java語言中體現(xiàn)了一種繼承關(guān)系,要想使得繼承關(guān)系合理,父類和派生類之間必須存在"is a"關(guān)系,即父類和派生類在概念本質(zhì)上應(yīng)該是相同的(參考文獻(xiàn)〔3〕中有關(guān)于"is a"關(guān)系的大篇幅深入的論述,有興趣的讀者可以參考)。對于interface 來說則不然,并不要求interface的實(shí)現(xiàn)者和interface定義在概念本質(zhì)上是一致的,僅僅是實(shí)現(xiàn)了interface定義的契約而已。為了使論述便于理解,下面將通過一個(gè)簡單的實(shí)例進(jìn)行說明。

考慮這樣一個(gè)例子,假設(shè)在我們的問題領(lǐng)域中有一個(gè)關(guān)于Door的抽象概念,該Door具有執(zhí)行兩個(gè)動(dòng)作open和close,此時(shí)我們可以通過abstract class或者interface來定義一個(gè)表示該抽象概念的類型,定義方式分別如下所示:

使用abstract class方式定義Door:

abstract class Door {
abstract void open();
abstract void close();
}


使用interface方式定義Door:


interface Door {
void open();
void close(); 



選擇我們,優(yōu)質(zhì)服務(wù),不容錯(cuò)過
1. 優(yōu)秀的網(wǎng)絡(luò)資源,強(qiáng)大的網(wǎng)站優(yōu)化技術(shù),穩(wěn)定的網(wǎng)站和速度保證
2. 15年上海網(wǎng)站建設(shè)經(jīng)驗(yàn),優(yōu)秀的技術(shù)和設(shè)計(jì)水平,更放心
3. 全程省心服務(wù),不必?fù)?dān)心自己不懂網(wǎng)絡(luò),更省心。
------------------------------------------------------------
24小時(shí)聯(lián)系電話:021-58370032
国产夫妻CCCXXX久久久| 四虎永久免费地址WW41.6| 国产精品久久午夜夜伦鲁鲁| 中文成人无码精品久久久不卡| 男男车车的车车网站W98免费| 宝贝把腿开大让我添添电影| 亚洲VA中文字幕无码久久不卡 | 久久R热这里只有精品| 成年无码AV片在线免缓冲| 亚洲无人区码卡二卡三卡四卡| 欧美最猛黑人XXXX黑人猛交| 国产精品亚洲А∨天堂2021| 野花社区日本韩国免费观看| 天堂AV无码AV一区二区三区| 蜜臀AV无码一区二区三区小说| 丰满少妇邻居找我泻火| 又大又紧又粉嫩18P少妇| 日韩人妻无码精品一专区| 久久久久精品少妇9999| 国产后入又长又硬| 99久久精品费精品国产一区二| 同性男男黄H片在线播放网站| 精品伊人久久大线蕉色首页| 丰满的人妻沦为玩物在线| 亚洲欧洲中文日韩久久AV乱码| 欧美黑人又大又粗又长久久久| 国产精品电影久久久久电影网| 亚洲最大天堂无码精品区| 人妻去按摩店被黑人按中出| 精品国产成人一区二区| 俄罗斯大荫蒂女人毛茸茸| 中国猛少妇色XXXXX| 天天天狠天天碰天天爱| 免费观看人成影片| 国产后入又长又硬| ASS十三小美女ASSPICS| 亚洲日韩乱码中文无码蜜桃| 天堂久久天堂AV色综合| 欧美黑人又大又粗又长久久久 | 台湾无码AV一区二区三区| 免费观看的国产大片APP下载 | 国产又黄又硬又粗| 潮喷大喷水系列无码久久精品| 亚洲国产精品成人一区二区在线 | 人人添人人澡人人澡人人人人| 狠狠色丁香久久婷婷综| 大香伊人久久精品一区二区| 亚洲日韩AV一区二区三区四区| 日本乱偷人妻中文字幕久久| 好男人影视官网在线WWW| 成人福利国产午夜AV免费不卡在| 亚洲精品国产美女久久久99| 熟妇人妻无乱码中文字幕真矢织江| 久久九九精品国产综合喷水| 国产精品久久久久婷婷五月色| 中文字幕乱近親相姦| 无码不卡AV东京热毛片| 麻豆亚洲AV成人无码久久精品| 国产播放隔着超薄丝袜进入| AV天堂亚洲国产AV| 野花日本韩国大全免费观看6 | 六十路七十路熟女乱码| 国产亚洲精品A在线观看| 多毛熟女HDVIDOS| CAOPOREN超碰| 亚洲国产成人久久综合三区| 少妇午夜啪爽嗷嗷叫视频| 欧美激情一区二区三区| 久久久久久久久久精品电影| 国产午夜精品一区二区| 丰满熟妇人妻AV无码区| 真人作爱试看90分钟免费影视 | 亚洲AV成人网站在线播放| 日韩一区无码视频| 欧美黑人性暴力猛交高清| 久久久久琪琪去精品色一到本 | 亚洲色丰满少妇高潮| 小妖精抬起臀嗯啊H军人| 色8激情欧美成人久久综合电影| 久久丫免费无码一区二区| 国产无人区码卡功能齐全| NARUTOMANGA全彩纲手| 永久免费的啪啪网站免费观看浪潮| 未成满18禁止免费无码网站| 人妻去按摩店被黑人按中出| 妺妺窝人体色WWW在线观看婚闹| 国偷自产一区二区免费| 国产成人A码男人的天堂| 宝贝你的奶好大我想吃| 2022国产成人无码AⅤ片| 亚洲AV综合A国产AV中文| 日本不卡高清兔费V| 免费无码一区二区三区蜜桃| 久久久久精品一区中文字幕| 国内精品久久久久影院一蜜桃| 成人网站国产在线视频内射视频| 一进一出一爽又粗又大| 亚洲丰满性熟妇ⅩXXOOO| 五月丁香伊人久久91视频| 手机成人免费A级毛片无码| 日本狂喷奶水在线播放212| 久久这里精品国产99丫E6| 国产精品线在线精品| 俄罗斯人和欧洲人的性格差异| 18禁黄网站禁片免费观看国产| 亚洲VA成无码人在线观看| 无码人妻精品一区二区三区夜夜嗨| 欧美一级内射黑人内射| 麻花传媒剧国产MV高清播放| 国国产自偷自偷免费一区 | 手在线播放波多野结衣| 人妻AVAV中文系列久久| 女人18片毛片60分钟630| 麻豆国产成人AV高清在线| 国模少妇一区二区三区| 国产精品露脸视频观看| 被黑人巨茎日出白浆的少妇| 99久久久国产精品免费牛牛 | 国产精品无码AV不卡| 丰满少妇被猛烈高清播放| 48熟女嗷嗷叫国产毛片小说| 亚洲精品成人片在线播放| 亚洲AV成人网站在线观看| 无人区码一码二码三码| 偷偷色噜狠狠狠狠的777米奇| 人妻中字视频中文乱码| 欧美成人黑人XX视频免费观看| 久久精品九九热无码免贵| 精品久久久无码中文字幕一丶| 国产精品乱码久久久久久小说 | 第一章少妇初尝云雨| 波多野结衣迅雷种子| 啊灬啊灬啊灬快灬高潮了霸总 | 日韩内射美女片在线观看网站| 免费无码成人AV片在线| 精品国产亚洲一区二区三区| 国产在线精品一区二区中文| 国产强奷在线播放| 国产欧美一区二区三区在线看| 成熟丰满女人丰满妇女aⅴ | 一级特黄无码毛片av一区二区| 亚洲AⅤ精品无码一区二区| 无码人妻精品一区二区三区下载| 日本中文字幕一区二区有码在线| 妺妺窝人体色www聚色窝仙踪| 精品人妻无码区在线视频 | 亚洲国产精品久久久久秋霞影院 | 各处沟厕大尺度偷拍女厕嘘嘘| JAPANESE春药高潮| 幼儿免费网站精品幼儿1| 一个添下面两个吃奶把腿扒开| 亚洲国产精品成人AV在线| 亚洲国产成人一区二区精品区| 无码秘 蜜桃一区二区三区| 四虎永久在线精品免费一区二区| 日本不卡在线视频二区三区| 人妻 清高 无码 中文字幕| 免费夜色污私人网站在线观看| 久久精品国产99精品亚洲 | 被俩个黑人前后破苞的女人| 巴西FREE性VIDEO极品| 办公室撕开奶罩揉吮奶头在线观看| 2018午夜福利| 97精品国产手机| ASS鲜嫩鲜嫩PICS日本| 硬插人妻一区二区三区| 再深点灬舒服灬太大了添动视频| 亚洲人女屁股眼HD| 亚洲人成色7777在线观看| 亚洲AV永久无码成人私密按摩| 无码人妻丝袜视频在线播免费| 上到少妇叫爽TUBE| 私はあなたのおさんです怎么读| 日出水了好深好涨| 少妇扒开粉嫩小泬视频| 天堂VA欧美ⅤA亚洲VA老司机| 色婷婷在线精品国自产拍 | 精品久久久久国产免费| 精品国产欧美一区二区| 久久99久国产精品66| 巨大黑人极品videos精品| 免费无码又爽又刺激高潮| 欧美人妇做爰XXXⅩ性高| 人妻在卧室被老板疯狂进入| 色天使综合婷婷国产日韩AV| 调教狠扇打肿私密跪撅屁股作文| 少妇的BBW性大片| 日韩AV一中美AV一中文字慕| 色综合天天视频在线观看| 偷拍亚洲另类无码专区制服| 日韩毛片无码永久免费看| 熟妇的荡欲BD高清| 无码H肉动漫在线观看| 亚洲AV成人一区国产精品| 亚洲精品宾馆在线精品酒店 | 日本无码视频精品一二三区 | 久久狠色AV噜噜狠狠狠狠97| 久久婷婷五月国产色综合| 久久99精品久久久久子伦| 叫吧宝贝我想听你叫什么|