對(duì)interface及抽象類的理解

接觸Java已經(jīng)有一段時(shí)間了贡翘,接口和抽象類也到處在用,用著用著就習(xí)慣了砰逻,也沒(méi)去想接口和抽象類到底應(yīng)該怎么用鸣驱。
什么是接口,什么是抽象類蝠咆,不需要Google踊东,連百度都一大堆。什么是接口刚操?
其實(shí)這些書(shū)上都講過(guò)闸翅,可能也都舉過(guò)例子。但是就我自己來(lái)說(shuō)菊霜,我看完教科書(shū)對(duì)接口的描述坚冀,并不是很懂,雖然我很清楚怎么用鉴逞,甚至用的很好记某,卻就是不知道怎么描述司训。


我為什么突然想要去了解他,而不是反正我現(xiàn)在用的好好的液南,只要會(huì)用就行了壳猜。我記得我當(dāng)時(shí)在看設(shè)計(jì)模式,工廠方法和抽象工廠贺拣,對(duì)于接口突然產(chǎn)生了疑問(wèn)蓖谢,當(dāng)時(shí)我舉了一個(gè)這樣的例子(第一種寫(xiě)法)

interface Food {    
}

interface Cook {    
    Food cook();
}

廚師可以做出食物,廚師和食物都是接口

class Dumpling implements Food {
}

class ChineseFoodChef implements Cook {
    @Override
    public Food cook() {    
        return new Dumpling();
    }
}

中國(guó)廚師做餃子譬涡,并沒(méi)有什么錯(cuò)闪幽,跑的好好的。但是有沒(méi)有覺(jué)得涡匀,Cook和Food其實(shí)作為抽象類更符合邏輯一點(diǎn)盯腌,所以我這樣寫(xiě),直接用抽象類(第二種寫(xiě)法)

abstract class Food {
}

class Dumpling extends Food {    
}

abstract class Cook{
    public abstract Food cook();
}

class ChineseFoodChef extends Cook {    
    @Override    
    public Food cook() {        
        return new Dumpling();    
    }
}

或者下面這種(第三種寫(xiě)法)

interface Eatable {    
}

abstract class Food implements Eatable{
}

class Dumpling extends Food {    
}

interface CanCook {    
    Eatable cook();
    //Food cook();
}

abstract class Cook implements CanCook{
    public abstract Food cook();
}

class ChineseFoodChef extends Cook {    
    @Override    
    public Food cook() {        
        return new Dumpling();    
    }
}

這樣是不是符合邏輯多了陨瘩,但是代碼也變多了腕够。然后接下來(lái)需求變了,多了一類人舌劳,教師帚湘。另外我媽媽是教師,并且會(huì)做菜甚淡。說(shuō)簡(jiǎn)單一點(diǎn)就是大诸,我媽媽是一個(gè)會(huì)做飯的教師。所以按照第一種寫(xiě)法

interface Teacher {
    void teach();
}

class MyMonther implements Teacher,Cook {
    @Override 
    public void teach() {
    }

    @Override 
    public Food cook() { 
        return null; 
    }
}

感覺(jué)上表達(dá)出來(lái)的意思是贯卦,我媽媽是一個(gè)教師也是一個(gè)廚師资柔,或者我媽媽會(huì)教書(shū)也會(huì)做菜,也并沒(méi)有什么錯(cuò)撵割。然后第二種寫(xiě)法

abstract class Teacher{
    public abstract void teach();
}

class MyMonther extends Teacher {
    @Override 
    public void teach() {
    }

    public Food cook() { 
        return null; 
    }
}

因?yàn)椴荒芾^承兩個(gè)父類贿堰,所以只能自己另外加一個(gè)方法。然后第三種寫(xiě)法

interface CanTeach { 
    void teach();
}

abstract class Teacher implements CanTeach { 
}

class MyMonther extends Teacher implements CanCook{ 
    @Override 
    public void teach() {
     } 

    @Override
    public Food cook() { 
        return null; 
    }
}

第三種是不是更符合要表達(dá)的意思啡彬,我媽媽是一個(gè)會(huì)做菜的教師羹与。不過(guò)對(duì)于上面的題材三種寫(xiě)法都可以,現(xiàn)在用下面這些(鳥(niǎo)庶灿,鴕鳥(niǎo)注簿,麻雀,飛機(jī)跳仿,會(huì)飛的)

interface 鳥(niǎo) {
    void 飛();
}

class 鴕鳥(niǎo) implements 鳥(niǎo) {
    @Override 
    public void 飛() { 
    }
}

class 麻雀 implements 鳥(niǎo) {
    @Override 
    public void 飛() { 
    }
}

class 飛機(jī) implements 鳥(niǎo) {
    @Override 
    public void 飛() { 
    }
}

看到這里其實(shí)顯而易見(jiàn)诡渴,用一類事物的抽象名詞作為接口名是很不符合邏輯的,鴕鳥(niǎo)是鳥(niǎo)但不會(huì)飛,飛機(jī)會(huì)飛但不是鳥(niǎo)妄辩。所以其實(shí)這類名詞用抽象類是最符合的

abstract class 鳥(niǎo) { 
    public abstract void 飛();
}

class 鴕鳥(niǎo) extends 鳥(niǎo) { 
    @Override 
    public void 飛() {
    }
}

class 麻雀 extends 鳥(niǎo) { 
    @Override 
    public void 飛() { 
    }
}

abstract class 飛機(jī)  { 
    public abstract void 飛();
}

class 波音747 extends 飛機(jī) {
    @Override 
    public void 飛() { 
    }
}

于是惑灵,鴕鳥(niǎo)還是會(huì)飛?exm眼耀?鳥(niǎo)和飛機(jī)有一樣的方法英支,多寫(xiě)一遍不累么?所以接口的價(jià)值就體現(xiàn)出來(lái)了

interface 會(huì)飛的 {
    void 飛();
}

abstract class 鳥(niǎo) { 
}

class 鴕鳥(niǎo) extends 鳥(niǎo) { 
   //鴕鳥(niǎo)是鳥(niǎo)但不會(huì)飛
}

class 麻雀 extends 鳥(niǎo) implements 會(huì)飛的{ 
    @Override 
    public void 飛() { 
    }
}

abstract class 飛機(jī) implements 會(huì)飛的{ 
}

class 波音747 extends 飛機(jī) { 
    @Override 
    public void 飛() { 
    }
}

其實(shí)接口就像一個(gè)可以靈活拆裝的組件哮伟,你想讓豬飛干花,只要給它裝個(gè)會(huì)飛的接口就行了,你想讓你的爸媽會(huì)做飯楞黄,給他們裝個(gè)會(huì)做飯的接口就好了池凄,哈哈哈


以上就是我的理解,不敢說(shuō)不服來(lái)辯鬼廓,如果有好的見(jiàn)解希望可以一起討論肿仑。覺(jué)得多個(gè)例子對(duì)比著來(lái)應(yīng)該比單個(gè)舉例效果要好,最近也在斷斷續(xù)續(xù)的看設(shè)計(jì)模式碎税,也會(huì)寫(xiě)一寫(xiě)自己的理解尤慰,一方面寫(xiě)下來(lái)能讓自己的理解更深刻甚至產(chǎn)生新疑問(wèn),另一方面也是為了能和大神們分享討論(感覺(jué)大神們都應(yīng)該不需要看我這么淺顯的理解=雷蹂。=)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伟端,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子匪煌,更是在濱河造成了極大的恐慌责蝠,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件虐杯,死亡現(xiàn)場(chǎng)離奇詭異玛歌,居然都是意外死亡昧港,警方通過(guò)查閱死者的電腦和手機(jī)擎椰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)创肥,“玉大人达舒,你說(shuō)我怎么就攤上這事√局叮” “怎么了巩搏?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)趾代。 經(jīng)常有香客問(wèn)我贯底,道長(zhǎng),這世上最難降的妖魔是什么撒强? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任禽捆,我火速辦了婚禮笙什,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘胚想。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布葫隙。 她就那樣靜靜地躺著狂巢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪牙躺。 梳的紋絲不亂的頭發(fā)上愁憔,一...
    開(kāi)封第一講書(shū)人閱讀 51,155評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音述呐,去河邊找鬼惩淳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛乓搬,可吹牛的內(nèi)容都是我干的思犁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼进肯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼激蹲!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起江掩,我...
    開(kāi)封第一講書(shū)人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤学辱,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后环形,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體策泣,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年抬吟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了萨咕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡火本,死狀恐怖危队,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钙畔,我是刑警寧澤茫陆,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站擎析,受9級(jí)特大地震影響簿盅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一桨醋、第九天 我趴在偏房一處隱蔽的房頂上張望见秽。 院中可真熱鬧,春花似錦讨盒、人聲如沸解取。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)禀苦。三九已至,卻和暖如春遂鹊,著一層夾襖步出監(jiān)牢的瞬間振乏,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工秉扑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留慧邮,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓舟陆,卻偏偏與公主長(zhǎng)得像误澳,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子秦躯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 原文鏈接: 深入理解Java的接口和抽象類 - 海 子 - 博客園 對(duì)于面向?qū)ο缶幊虂?lái)說(shuō)忆谓,抽象是它的一大特征之一。...
    kristine閱讀 635評(píng)論 0 8
  • 對(duì)于面向?qū)ο缶幊虂?lái)說(shuō)踱承,抽象是它的一大特征之一倡缠。在Java中,可以通過(guò)兩種形式來(lái)體現(xiàn)OOP的抽象:接口和抽象類茎活。這兩...
    lucky_yaya閱讀 350評(píng)論 0 1
  • 【8月31日载荔,陜西榆林市第一醫(yī)院綏德院區(qū)一名產(chǎn)婦在待產(chǎn)時(shí)從醫(yī)院五樓墜亡盾饮。事后,醫(yī)院與家屬就產(chǎn)婦死因各執(zhí)一詞身辨。墜亡產(chǎn)...
    歲靜好閱讀 777評(píng)論 0 5
  • 2014/7/22 1.真心的為別人付出的努力而感動(dòng)丐谋,這是一種什么樣的心理狀態(tài)芍碧,是由別人的做法聯(lián)想到了自己煌珊,感動(dòng)了...
    扶搖萬(wàn)事屋閱讀 212評(píng)論 0 1
  • 妖精很漂亮,那種漂亮不是物質(zhì)堆積起來(lái)的泌豆,是一種氣場(chǎng)定庵。而我很普通,扎在人群中會(huì)被迅速淹沒(méi),即使撥拉也辯不出來(lái)那個(gè)...
    榛木月月閱讀 518評(píng)論 0 2