Java8學(xué)習(xí)筆記--接口的默認(rèn)方法與靜態(tài)方法

Java8已經(jīng)發(fā)布很久了,但是由于Android一直沒有提供支持复隆,所以并沒有關(guān)注太多甲献。最近Android Studio的最新預(yù)覽版已經(jīng)開始支持Java8的一些新特性,作為一個(gè)程序員痊剖,比較重要的是跟上技術(shù)的節(jié)奏,所以最近開始學(xué)習(xí)一下Java8的新特性垒玲,在這里進(jìn)行一些學(xué)習(xí)心得和經(jīng)驗(yàn)的分享陆馁。

由于是剛開始學(xué),肯定有很多地方理解的不到位和錯(cuò)誤的情況合愈,歡迎進(jìn)行指正和補(bǔ)充叮贩,大家一起共同進(jìn)步谨湘。

Java8 官方簡介

Android Studio 支持 Java8 的說明

1 接口的默認(rèn)方法與靜態(tài)方法

Java8 對接口的定義進(jìn)行了進(jìn)一步擴(kuò)展冠桃,在之前,一個(gè)接口中的所有方法必須是抽象的。而在這里憾儒,引入了默認(rèn)方法與靜態(tài)方法的概念开仰。
(這一新特性在API 24 及以上可以使用)

1.1 默認(rèn)方法

在官方文檔中對默認(rèn)方法是這樣解釋的:

Default methods enable you to add new functionality to the interfaces of your libraries and ensure binary compatibility with code written for older versions of those interfaces.

簡單來說就是可以向接口中提供新的方法喉刘,而保證對舊版本的兼容

至于為什么會這樣新博,我們先看看什么是默認(rèn)方法:

首先,默認(rèn)方法可以有方法體桃纯,并且用關(guān)鍵字default修飾:

interface MyListener
    default void sayHello(){
        System.out.println("hello");
    }
}

默認(rèn)方法與普通接口內(nèi)方法最大的區(qū)別是酷誓,接口的實(shí)現(xiàn)類可以選擇不重寫此方法。

具體應(yīng)用情況是比如在一個(gè)項(xiàng)目中态坦,對于新的需求盐数,需要在接口中抽象新的方法,但又不是所有的實(shí)現(xiàn)類都需要新方法伞梯,如果放在之前玫氢,我們就不得不對所有的實(shí)現(xiàn)類都重寫新的抽象方法。而默認(rèn)方法的引入就很大程度上解決了這種困境壮锻。當(dāng)需要抽象新方法時(shí)考慮使用默認(rèn)方法琐旁,然后只在需要的地方重寫即可。這樣就實(shí)現(xiàn)了官方文檔中所說的:提供新方法而且兼容舊版本猜绣。

默認(rèn)方法在接口中可以定義多個(gè)。

注意如果實(shí)現(xiàn)類重寫了默認(rèn)方法敬特,那么該方法就不可以再用default修飾

如果是一個(gè)接口繼承另一個(gè)有默認(rèn)方法的接口掰邢,也可以選擇不重寫,如果重寫伟阔,也可以重寫為新的默認(rèn)方法

interface MyListener2 extends MyListener{
    @Override
    default void sayHello() {     
    }
}

當(dāng)然也可以去除default修飾辣之,重新成為一個(gè)新的抽象方法

interface MyListener2 extends MyListener{
    @Override
    void sayHello();
}

如果是在多重實(shí)現(xiàn)有多個(gè)相同的默認(rèn)方法,為了避免歧義皱炉,這時(shí)就必須重寫該方法

1.2 靜態(tài)方法

既然可以在接口中定義帶方法體的默認(rèn)方法怀估,那么引入靜態(tài)方法也在情理之中了。
與普通的靜態(tài)方法一樣合搅,使用static修飾即可:

static void sayHi(){
        System.out.println("hi");
}

還記得普通類中的靜態(tài)方法既可以通過類名調(diào)用多搀,也可以通過實(shí)例調(diào)用,但是在接口中的靜態(tài)方法則只能通過 接口名.方法名 的形式調(diào)用灾部。也就是說不能通過實(shí)現(xiàn)類進(jìn)行調(diào)用康铭。

由于只能通過 接口名.方法名 的形式調(diào)用,所以多重實(shí)現(xiàn)中赌髓,靜態(tài)方法可以重名或相同从藤,并不會引起歧義催跪。

最后需要注意的時(shí),雖然默認(rèn)方法的引入極大的方便我們項(xiàng)目的擴(kuò)展夷野,但是由于比較容易引起歧義懊蒸,所以使用時(shí)還是要考慮完全。

Java8學(xué)習(xí)筆記目錄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悯搔,一起剝皮案震驚了整個(gè)濱河市骑丸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鳖孤,老刑警劉巖者娱,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異苏揣,居然都是意外死亡黄鳍,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門平匈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來框沟,“玉大人,你說我怎么就攤上這事增炭∪淘铮” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵隙姿,是天一觀的道長梅垄。 經(jīng)常有香客問我,道長输玷,這世上最難降的妖魔是什么队丝? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮欲鹏,結(jié)果婚禮上机久,老公的妹妹穿的比我還像新娘。我一直安慰自己赔嚎,他們只是感情好膘盖,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著尤误,像睡著了一般侠畔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上袄膏,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天践图,我揣著相機(jī)與錄音,去河邊找鬼沉馆。 笑死码党,一個(gè)胖子當(dāng)著我的面吹牛德崭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播揖盘,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼眉厨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了兽狭?” 一聲冷哼從身側(cè)響起憾股,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎箕慧,沒想到半個(gè)月后服球,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡颠焦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年斩熊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伐庭。...
    茶點(diǎn)故事閱讀 38,626評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡粉渠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出圾另,到底是詐尸還是另有隱情霸株,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布集乔,位于F島的核電站去件,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏扰路。R本人自食惡果不足惜箫攀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望幼衰。 院中可真熱鬧,春花似錦缀雳、人聲如沸渡嚣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽识椰。三九已至,卻和暖如春深碱,著一層夾襖步出監(jiān)牢的瞬間腹鹉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工敷硅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留功咒,地道東北人愉阎。 一個(gè)月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像力奋,于是被迫代替她去往敵國和親榜旦。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評論 2 348

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

  • 原文鏈接: Default and Static Methods for Interfaces 原文作者: she...
    忽來閱讀 3,905評論 8 17
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理景殷,服務(wù)發(fā)現(xiàn)溅呢,斷路器,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • 面向?qū)ο螅ㄏ拢?6.1 java8增強(qiáng)的包裝類 int Integerchar Character其他的都是直接首...
    婁童閱讀 589評論 0 2
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法猿挚,類相關(guān)的語法咐旧,內(nèi)部類的語法,繼承相關(guān)的語法绩蜻,異常的語法铣墨,線程的語...
    子非魚_t_閱讀 31,598評論 18 399
  • 產(chǎn)品介紹 『一言』是一款基于文字記錄的社交產(chǎn)品,用于記錄辜羊、分享生活點(diǎn)滴踏兜,收藏、共鳴他人的字句八秃。 產(chǎn)品定位 記錄字句...
    花之葭閱讀 3,226評論 0 4