Java新特性之Java8的那些事兒-接口默認(rèn)方法

什么是接口默認(rèn)方法

? 從Java8開始,程序允許在接口中包含帶有具體實現(xiàn)的方法斋射,使用default修飾咒吐,這類方法就是默認(rèn)方法。默認(rèn)方法在接口中可以添加多個娜谊,并且Java8提供了很多對應(yīng)的接口默認(rèn)方法确买。

設(shè)計接口默認(rèn)方法好處

? 使用接口編程的好處是的開發(fā)是面向抽象而不再是面向具體來編程,使得程序變得很靈活纱皆,缺陷是湾趾,當(dāng)需要修改接口時候,此時對應(yīng)需要修改全部實現(xiàn)該接口的類派草,舉個例子搀缠, java 8 之前對于我們常用的集合框架沒有 foreach 方法,通常能想到的解決辦法是在JDK里給相關(guān)的接口添加新的方法及實現(xiàn)近迁。從Java8開始艺普,引入了接口默認(rèn)方法,這樣的好處也是很明顯的鉴竭,首先解決了Java8以前版本接口兼容性問題歧譬,同時對于我們以后的程序開發(fā),也可以在接口子類中直接使用接口默認(rèn)方法搏存,而不再需要再各個子類中各自實現(xiàn)響應(yīng)接口方法瑰步。

接口默認(rèn)方法語法定義

public interface IMathOperation {
    /**
     * 定義接口默認(rèn)方法 支持方法形參
     */
    default void print(){
        System.out.println("這是數(shù)值運算基本接口。璧眠。缩焦。");
    }
    
     /**
     * 定義靜態(tài)默認(rèn)方法
     */
    static void version(){
        System.out.println("這是1.0版簡易計算器");
    } 
    
    
}

接口默認(rèn)方法使用

  • 定義IMathOperation 接口 并提供默認(rèn)打印方法
public interface IMathOperation {
    /**
     * 定義接口默認(rèn)方法 支持方法形參
     */
    default void print(){
        System.out.println("這是數(shù)值運算基本接口兵钮。。舌界。");
    }
    
     /**
     * 定義靜態(tài)默認(rèn)方法
     */
    static void version(){
        System.out.println("這是1.0版簡易計算器");
    }

    /**
     * 整數(shù)加法運算方法
     * @param a
     * @param b
     * @return
     */
    public int add(int a,int b);
}
  • 子類實現(xiàn)

定義MathOperationImpl子類 實現(xiàn)IMathOperation 接口

1553218527709.png
1553218563670.png

這里可以看到,在實現(xiàn)IMathOperation 接口時可以選擇實現(xiàn)(也可以不實現(xiàn) 泰演,在子類方法中直接使用)接口默認(rèn)方法呻拌。

public class MathOperationImpl implements  IMathOperation {
    @Override
    public int add(int a, int b) {
        // 子類中可以直接調(diào)用父類接口默認(rèn)方法
        IMathOperation.super.print();
        // 調(diào)用父類靜態(tài)默認(rèn)方法
        IMathOperation.version();
        return a+b;
    }
}

多個默認(rèn)方法情況

? 使用Java8開發(fā)應(yīng)用程序是,子類實現(xiàn)多個接口時睦焕,對于接口默認(rèn)方法定義可能會出現(xiàn)多個默認(rèn)方法藐握,并且接口默認(rèn)方法可能會出現(xiàn)同名情況,此時對于子類在實現(xiàn)或者調(diào)用時通常遵循三條原則:

1.類中的方法優(yōu)先級最高

2.如果第一條無法進(jìn)行判斷,那么子接口的優(yōu)先級更高:函數(shù)簽名相同時,優(yōu)先選擇擁有最具體實現(xiàn)的默認(rèn)方法的接口,即如果B繼承了A,那么B就比A更加具體

3.如果還是無法判斷,繼承了多個接口的類必須通過顯示覆蓋和調(diào)用期望的方法,顯示地選擇使用哪一個默認(rèn)方法的實現(xiàn)

示例代碼如下:

/**
 * 定義手機(jī)接口  提供默認(rèn)info方法
 */
public interface Phone {
    default void info(){
        System.out.println("這是一部手機(jī)");
    }
}


/**
 * 定義MiPhone子接口 并繼承 Phone 父接口 同時也提供info方法
 */
public interface MiPhone extends Phone{
    default void info(){
        System.out.println("這是一部小米手機(jī)");
    }
}


/**
 * 實現(xiàn) Phone MiPhone 接口
 */
public class M2sPhone implements Phone,MiPhone {

    public static void main(String[] args) {
        new M2sPhone().info();
    }
}

打印結(jié)果: 
這是一部小米手機(jī)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末垃喊,一起剝皮案震驚了整個濱河市猾普,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌本谜,老刑警劉巖初家,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異乌助,居然都是意外死亡溜在,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門他托,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掖肋,“玉大人,你說我怎么就攤上這事赏参≈玖” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵把篓,是天一觀的道長纫溃。 經(jīng)常有香客問我,道長韧掩,這世上最難降的妖魔是什么皇耗? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮揍很,結(jié)果婚禮上郎楼,老公的妹妹穿的比我還像新娘。我一直安慰自己窒悔,他們只是感情好呜袁,可當(dāng)我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著简珠,像睡著了一般阶界。 火紅的嫁衣襯著肌膚如雪虹钮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天膘融,我揣著相機(jī)與錄音芙粱,去河邊找鬼。 笑死氧映,一個胖子當(dāng)著我的面吹牛春畔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播岛都,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼律姨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了臼疫?” 一聲冷哼從身側(cè)響起择份,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎烫堤,沒想到半個月后荣赶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡鸽斟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年讯壶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片湾盗。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡伏蚊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出格粪,到底是詐尸還是另有隱情躏吊,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布帐萎,位于F島的核電站比伏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏疆导。R本人自食惡果不足惜赁项,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望澈段。 院中可真熱鬧悠菜,春花似錦、人聲如沸败富。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽兽叮。三九已至芬骄,卻和暖如春猾愿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背账阻。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工蒂秘, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人淘太。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓姻僧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親琴儿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,728評論 2 351

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

  • 前言 本文是Java基礎(chǔ)回爐文集的第三篇嘁捷,關(guān)于文集可通過《Java基礎(chǔ)回爐和提升暨文集開篇》了解造成。 今天我們將從接...
    TimeReview閱讀 581評論 0 1
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,093評論 1 32
  • 本文結(jié)合Java8,重新整理了接口和抽象類的區(qū)別雄嚣,以及如何理解接口的設(shè)計目的晒屎。并且分析了Java8的接口新特性:d...
    _Zy閱讀 2,664評論 0 7
  • 今天媽媽上街帶回來了一個存錢罐。這個存錢罐是小雞形狀的缓升,看上去非彻穆常可愛。 這個小雞形狀的存錢罐剛買回來我就一眼...
    龍族閱讀 426評論 0 1
  • 紀(jì)錄片最打動人的地方,就是真實歧寺。 1燥狰、 《生門》講得是女人生孩子的事情。不過跟中國人長久的關(guān)注點不一樣的是斜筐,這次的...
    筆下長青閱讀 670評論 0 2