接口的作用

曾看過很多形象的比喻,比如買電腦回來要有USB接口礼仗,不能直接把鼠標(biāo)焊在主板上之類的,很生動逻悠,但是對初學(xué)者看完還是一臉“啥元践?你說啥?這到底和接口有什么用的問題有啥關(guān)系童谒?”的表情单旁,所以感覺還是用代碼來舉例比較好。
以下是我在知乎上看到的一個回答饥伊,我個人認(rèn)為很好理解象浑,又形象生動,又有代碼可以參考琅豆。
推薦大家看看原答案愉豺,評論里有一些童鞋提的問題,一起看下來會有更深的理解茫因。我根據(jù)原答案和評論修改了接口蚪拦、類和方法的名稱還有部分描述

  • 接口的作用對于很多新手來說很不容易理解,我給大家舉個例子冻押。
  • 接口只是一個規(guī)范驰贷,所以里面的方法都是空的。
  • 假如我開了一個寵物糧店洛巢,聲明了一個買東西的動作括袒,這就相當(dāng)于一個接口,
image
image
/**
 * Created by wanggs on 2017/7/7.
 */
public interface BuySomeThing {
    public abstract void buy();
}

  • 當(dāng)一條狗看到了狼渊,自己要買東西箱熬,所以它去實(shí)現(xiàn)這個接口
/**
 * Created by wanggs on 2017/7/7.
 */
public class Dog implements BuySomeThing {
    public void buy() {
        System.out.println("我是狗类垦,我要買狗糧");
    }
}
  • 當(dāng)一只貓看到了狈邑,自己要買東西,所以也去實(shí)現(xiàn)這個接口
/**
 * Created by wanggs on 2017/7/7.
 */
public class Cat implements BuySomeThing {
    public void buy() {
        System.out.println("我是貓蚤认,我要買貓糧");
    }
}
  • 當(dāng)狗和貓來我的店之前米苹,我是不知道他們到底是什么,但是當(dāng)他們來到我的店砰琢,我就知道一個要貓糧糧蘸嘶,一個要狗糧糧良瞧。因?yàn)樗麄兌紝?shí)現(xiàn)了我這個接口,都可以買训唱。下面這個類相當(dāng)于一個接待顧客的類褥蚯,即店小二,他接待所有實(shí)現(xiàn)了我這個寵物店接口的動物况增,傳進(jìn)來一個BuySomeThing類型的寵物赞庶,注意,這個BuySomeThing是接口
/**
 * Created by wanggs on 2017/7/7.
 */
public class PetShop {
    public void sell(BuySomeThing buySomeThing){
        buySomeThing.buy();

    }
}
  • 好了澳骤,這個時候我這個老板出現(xiàn)了歧强,我可以給他們賣糧食了,相當(dāng)于測試類
public class Tests {
    public static void main(String[] args) {
        BuySomeThing dog = new Dog();//實(shí)例化一條狗为肮,相當(dāng)于把狗顧客實(shí)例化
        BuySomeThing cat = new Cat();//實(shí)例化一只貓摊册,相當(dāng)于把貓顧客實(shí)例化
        PetShop petShop = new PetShop();//實(shí)例化一個店小二

        petShop.Sell(dog);//把狗交給店小二
        petShop.Sell(cat);//把貓交給店小二
    }
}
  • 這樣運(yùn)行的結(jié)果就是
我是狗,我要買狗糧
我是貓颊艳,我要買貓糧

你知道嗎茅特,整個過程我這個店主其實(shí)根本不知道來的到底是貓是狗還是其他什么,我只要有一個店小二棋枕,把這些來的不知什么動物都全部交給店小二温治,店小二就知道怎么去賣了,因?yàn)檫@些狗啊貓啊都實(shí)現(xiàn)了我這個寵物店的接口戒悠,而店小二就負(fù)責(zé)接待所有實(shí)現(xiàn)了我這個接口的動物熬荆。這就有一個好處,假如明天來了一頭小豬绸狐,只要它實(shí)現(xiàn)了我這個接口卤恳,我只管交給店小二處理就OK了,我這個店小二根本不需要變化寒矿,我這個店主也只需要實(shí)例化一下這個動物就OK
你想突琳,假如沒有接口,會怎么辦符相,來一個貓拆融,我要去創(chuàng)造一個貓,還要實(shí)例化啊终,來一只狗镜豹,我要創(chuàng)建一只狗,同樣要實(shí)例化蓝牲,還要配備專門的店小二去接待趟脂,就會相當(dāng)麻煩


說點(diǎn)自己的感想:小白經(jīng)常認(rèn)為的一點(diǎn)是,既然我要重寫所有方法例衍,我為什么還要用這個接口呢昔期?我同樣也寫這些方法已卸,也用這些參數(shù),不用接口行不行硼一?難道接口只是定義了一些非得讓我重寫不可的方法頭累澡?

其實(shí)不然,接口經(jīng)常用在非個人項(xiàng)目上般贼,得合作永乌,不是一個人寫所有。所以不能只想到你實(shí)現(xiàn)了這個功能具伍,要想到你實(shí)現(xiàn)完之后別人會因?yàn)槟氵@個類實(shí)現(xiàn)了規(guī)定好的接口而可以直接用來做下面的工作翅雏,比如你實(shí)現(xiàn)了buy功能,但是別人不知道啊人芽,但是你實(shí)現(xiàn)了BuySomeThing這個接口望几,別人就知道你肯定實(shí)現(xiàn)了buy這個功能,然后可以直接調(diào)用(參考PetShop這個類)
另外接口也很好的規(guī)范了實(shí)現(xiàn)時的方法名參數(shù)啥的萤厅,避免了漏寫一下方法實(shí)現(xiàn)橄抹,錯寫一些參數(shù)。


最后的最后惕味,我總結(jié)一下接口的作用吧:

  1. 多態(tài) 向上轉(zhuǎn)型體現(xiàn)了多態(tài)的思想楼誓,本身接口就是面向?qū)ο笏枷肜矬w現(xiàn)出來的一個特性

  2. 規(guī)范 定下了一個方法名傳入?yún)?shù)類型返回值類型的規(guī)范,避免了很多不必要的麻煩

  3. 協(xié)議 雙方協(xié)議好名挥,只要實(shí)現(xiàn)預(yù)定好的接口的就能用來實(shí)現(xiàn)后續(xù)的功能疟羹,不關(guān)心實(shí)現(xiàn)接口的類的具體實(shí)現(xiàn)
    4.擴(kuò)展 擴(kuò)展一個新功能,只要實(shí)現(xiàn)預(yù)定好的接口禀倔,這個新功能就能被調(diào)用

  4. 維護(hù) 當(dāng)改變一個功能的實(shí)現(xiàn)甚至換成別的類的時候榄融,但如果還有其他地方引用了原類,很難維護(hù)救湖。如果使用接口可以輕易切換成新類的引用

  5. 安全 在一個普通類實(shí)現(xiàn)接口以后愧杯,向上轉(zhuǎn)型,則只暴露出接口描述的方法鞋既,別人獲得的引用也只能使用接口描述的方法力九,所以安全,比如回調(diào)機(jī)制

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邑闺,一起剝皮案震驚了整個濱河市跌前,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌检吆,老刑警劉巖舒萎,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蹭沛,居然都是意外死亡臂寝,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門摊灭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咆贬,“玉大人,你說我怎么就攤上這事帚呼√投校” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵煤杀,是天一觀的道長眷蜈。 經(jīng)常有香客問我,道長沈自,這世上最難降的妖魔是什么酌儒? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮枯途,結(jié)果婚禮上忌怎,老公的妹妹穿的比我還像新娘。我一直安慰自己酪夷,他們只是感情好榴啸,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著晚岭,像睡著了一般鸥印。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坦报,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天辅甥,我揣著相機(jī)與錄音,去河邊找鬼燎竖。 笑死璃弄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的构回。 我是一名探鬼主播夏块,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼纤掸!你這毒婦竟也來了脐供?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤借跪,失蹤者是張志新(化名)和其女友劉穎政己,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體掏愁,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡歇由,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年卵牍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沦泌。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡糊昙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谢谦,到底是詐尸還是另有隱情释牺,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布回挽,位于F島的核電站没咙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏千劈。R本人自食惡果不足惜祭刚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望队塘。 院中可真熱鬧袁梗,春花似錦、人聲如沸憔古。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸿市。三九已至锯梁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間焰情,已是汗流浹背陌凳。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留内舟,地道東北人合敦。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像验游,于是被迫代替她去往敵國和親充岛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

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

  • C#接口是一個讓很多初學(xué)C#者容易迷糊的東西耕蝉,用起來好像很簡單崔梗,定義接口,里面包含方法垒在,但沒有方法具體實(shí)現(xiàn)的代碼蒜魄,...
    目標(biāo)肢解閱讀 930評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器谈为,智...
    卡卡羅2017閱讀 134,637評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,846評論 25 707
  • 01 九月剛開學(xué)的第一個周末峦阁,艷陽高照谦铃。我搭上擁擠的520公交車耘成,書包里裝著給她的生日禮物榔昔,前往她所在的那個校區(qū)。...
    梅子青時節(jié)閱讀 733評論 4 5
  • 突然發(fā)現(xiàn)記日記很重要瘪菌,甚至比記錄每天去過的點(diǎn)還重要撒会。 蔡工今晚說了很多,正是他那句“先說這么多吧师妙,你們自己消化消化...
    末之天蝎閱讀 98評論 0 0