日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 8新特性探究(二)深入解析默认方法

發布時間:2023/12/3 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 8新特性探究(二)深入解析默认方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自?Java 8新特性探究(二)深入解析默認方法

?

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

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

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

簡單的例子

一個接口A,Clazz類實現了接口A。

1

2

3

4

5

6

7

8

9

10

11

12

publicinterface A {

????defaultvoid foo(){

???????System.out.println("Calling A.foo()");

????}

}

????

publicclass Clazz implementsA {

????publicstatic void main(String[] args){

???????Clazz clazz = newClazz();

???????clazz.foo();//調用A.foo()

????}

}

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

java 8抽象類與接口對比

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

相同點不同點
1.都是抽象類型;

?

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

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

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

?

2.抽象類和接口所反映出的設計理念不同。其實抽象類表示的是”is-a”關系,接口表示的是”like-a”關系;

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

多重繼承的沖突說明

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

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

2.否則,則會優先選取最具體的實現,比如下面的例子 B重寫了A的hello方法。

輸出結果是:Hello World from B

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

1

2

3

4

5

6

7

8

9

10

11

publicclass C implementsA{

?????

????@Override

????publicvoid hello(){

????????A.super.hello();

????}

??????

????publicstatic void main(String[] args){

????????newC().hello();

????}

}

輸出結果是:Hello World from A

總結

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

跟上篇博文結合起來,就是JEP126的全部了,后面還有54個特性等著我們去探究,為了讓大家比較深刻了解lambda,學以致用,下一篇還是lambda的內容,預告一下下篇的標題:《Java 8特性探究(三)解開lambda表達式最強作用的神秘面紗》,第二個特性 將從第四篇開始,謝謝大家支持,敬請期待。。。

?

?

總結

以上是生活随笔為你收集整理的Java 8新特性探究(二)深入解析默认方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。