激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java8新特性之默認方法(default)淺析

Java8新特性之默認方法(default)淺析

2019-11-23 17:25Java教程網(wǎng) JAVA教程

這篇文章主要介紹了Java8新特性之默認方法(default)淺析,默認方法也稱為虛擬擴展方法或防護方法,可以讓我們修改接口而不破壞原來的實現(xiàn)類的結(jié)構(gòu),需要的朋友可以參考下

一、什么是默認方法,為什么要有默認方法

簡單說,就是接口可以有實現(xiàn)方法,而且不需要實現(xiàn)類去實現(xiàn)其方法。只需在方法名前面加個default關(guān)鍵字即可。

為什么要有這個特性?首先,之前的接口是個雙刃劍,好處是面向抽象而不是面向具體編程,缺陷是,當需要修改接口時候,需要修改全部實現(xiàn)該接口的類,目前的java 8之前的集合框架沒有foreach方法,通常能想到的解決辦法是在JDK里給相關(guān)的接口添加新的方法及實現(xiàn)。然而,對于已經(jīng)發(fā)布的版本,是沒法在給接口添加新方法的同時不影響已有的實現(xiàn)。所以引進的默認方法。他們的目的是為了解決接口的修改與現(xiàn)有的實現(xiàn)不兼容的問題。

簡單的例子:一個接口A,Clazz類實現(xiàn)了接口A。

復制代碼代碼如下:

public interface A {
    default void foo(){
       System.out.println("Calling A.foo()");
    }
}

public class Clazz implements A {
    public static void main(String[] args){
       Clazz clazz = new Clazz();
       clazz.foo();//調(diào)用A.foo()
    }
}

 


代碼是可以編譯的,即使Clazz類并沒有實現(xiàn)foo()方法。在接口A中提供了foo()方法的默認實現(xiàn)。

二、java 8抽象類與接口對比


這一個功能特性出來后,很多同學都反應了,java 8的接口都有實現(xiàn)方法了,跟抽象類還有什么區(qū)別?其實還是有的,請看下表對比。。

 

相同點

不同點

1.都是抽象類型;

2.都可以有實現(xiàn)方法(以前接口不行);

3.都可以不需要實現(xiàn)類或者繼承者去實現(xiàn)所有方法,(以前不行,現(xiàn)在接口中默認方法不需要實現(xiàn)者實現(xiàn))

1.抽象類不可以多重繼承,接口可以(無論是多重類型繼承還是多重行為繼承);

2.抽象類和接口所反映出的設(shè)計理念不同。其實抽象類表示的是"is-a"關(guān)系,接口表示的是"like-a"關(guān)系;

3.接口中定義的變量默認是public static final 型,且必須給其初值,所以實現(xiàn)類中不能重新定義,也不能改變其值;抽象類中的變量默認是 friendly 型,其值可以在子類中重新定義,也可以重新賦值。

 

 

三、多重繼承的沖突說明

由于同一個方法可以從不同接口引入,自然而然的會有沖突的現(xiàn)象,默認方法判斷沖突的規(guī)則如下:

1.一個聲明在類里面的方法優(yōu)先于任何默認方法(classes always win)

2.否則,則會優(yōu)先選取最具體的實現(xiàn),比如下面的例子 B重寫了A的hello方法。
Java8新特性之默認方法(default)淺析

輸出結(jié)果是:Hello World from B

如果想調(diào)用A的默認函數(shù),則用到新語法X.super.m(...),下面修改C類,實現(xiàn)A接口,重寫一個hello方法,如下所示:

復制代碼代碼如下:

public class C implements A{

    @Override
    public void hello(){
        A.super.hello();
    }

    public static void main(String[] args){
        new C().hello();
    }
}

 

輸出結(jié)果是:Hello World from A

四、總結(jié)

默認方法給予我們修改接口而不破壞原來的實現(xiàn)類的結(jié)構(gòu)提供了便利,目前java 8的集合框架已經(jīng)大量使用了默認方法來改進了,當我們最終開始使用Java 8的lambdas表達式時,提供給我們一個平滑的過渡體驗。也許將來我們會在API設(shè)計中看到更多的默認方法的應用。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 青青草免费观看完整版高清 | 欧美精品久久久久久久久老牛影院 | 日日草夜夜草 | 精品国产一区二区三区四 | 视频一区二区视频 | 久久17| 国产流白浆高潮在线观看 | 在线看日本| 精品69人人人人 | 91亚洲免费视频 | 黄色一级片免费在线观看 | 九九热精品视频在线 | 成人在线视频一区 | 国产成人免费精品 | 永久免费毛片 | 综合图区亚洲 | 亚洲第一成人在线观看 | 爽毛片 | 欧美视频一区二区三区在线观看 | 色女生影院 | 91羞羞 | 久久久国产精品成人免费 | 黄污视频在线看 | 亚洲综合中文 | 日韩精品免费一区二区三区 | 欧美老外a级毛片 | 欧美一级黄色免费看 | 91久久久久久久久久久久久久 | 欧美a∨亚洲欧美亚洲 | 91成人在线免费 | 国产呦在线观看视频 | 蜜桃视频在线播放 | 精品一区久久久 | av成人一区二区 | 欧美一级特级 | 72pao成人国产永久免费视频 | 日本羞羞影院 | 国产精品久久久久久久久久尿 | 中文字幕在线播放第一页 | 成人在线视频在线观看 | 一本色道久久综合亚洲精品小说 |