一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 詳解Java8接口中引入Default關鍵字的本質原因

詳解Java8接口中引入Default關鍵字的本質原因

2022-01-06 21:00測試開發Kevin Java教程

熟悉java接口的同學都知道,接口被某些類實現后,一旦在接口中增加了新方法,那么實現該接口的所有類都要實現這個新增的方法(即使這個新增的接口對某些類沒有用處)。

詳解Java8接口中引入Default關鍵字的本質原因

接口的常規實現方式

熟悉java接口的同學都知道,接口被某些類實現后,一旦在接口中增加了新方法,那么實現該接口的所有類都要實現這個新增的方法(即使這個新增的接口對某些類沒有用處)。

定義一個接口

  1. public interface IDemo { 
  2.     void func1(); 

類CDemo1實現接口IDemo

  1. public class CDemo1 implements IDemo{ 
  2.     @Override 
  3.     public void func1() { 
  4.     } 

類CDemo2實現接口IDemo

  1. public class CDemo2 implements IDemo{ 
  2.     @Override 
  3.     public void func1() { 
  4.     } 

在IDemo中新增加方法func2()

  1. public interface IDemo { 
  2.     void func1(); 
  3.     void func2(); 

可以看到CDemo1和CDemo2中需要強制實現方法func2(),如下圖所示:

詳解Java8接口中引入Default關鍵字的本質原因
詳解Java8接口中引入Default關鍵字的本質原因

接口中的default

上面的實例導致了前面提出的那個問題,一旦在接口中增加了新方法,那么已經實現了該接口的所有的類都要實現這個新增的方法!那么,如果是JDK中的某個核心接口需要變更,需要新增某些方法呢?這個工作量更是可想而知,我們來看一下java.util.Collection這個接口,它在jdk1.7中的方法包括:

詳解Java8接口中引入Default關鍵字的本質原因

而在JDk 1.8中 Collection接口中包括方法如下:

詳解Java8接口中引入Default關鍵字的本質原因

其中新增的接口,都用default來修飾(jdk1.7升級到jdk1.8后,接口的重要變化),源代碼如下:

  1. default Stream<E> stream() { 
  2.  return StreamSupport.stream(spliterator(), false); 
  3.  
  4. default Stream<E> parallelStream() { 
  5.     return StreamSupport.stream(spliterator(), true); 
  6.  
  7. default Spliterator<E> spliterator() { 
  8.     return Spliterators.spliterator(this, 0); 
  9.  
  10. default boolean removeIf(Predicate<? super E> filter) { 
  11.     Objects.requireNonNull(filter); 
  12.     boolean removed = false
  13.     final Iterator<E> each = iterator(); 
  14.     while (each.hasNext()) { 
  15.         if (filter.test(each.next())) { 
  16.             each.remove(); 
  17.             removed = true
  18.         } 
  19.     } 
  20.     return removed; 

我們不僅大吃一驚,這還是我們熟知的接口嗎?接口中的方法居然有了實現代碼!吃驚過后,我們來想想作者的意圖。還是上面的代碼,我們新增方法func3(),并完成簡單的實現

  1. public interface IDemo { 
  2.     void func1(); 
  3.     void func2(); 
  4.     default void func3(){ 
  5.         System.out.println("this is default func2"); 
  6.     } 

然后查看類CDemo1,一切正常,沒有任何錯誤提示:

詳解Java8接口中引入Default關鍵字的本質原因

實例化CDemo1后,可以正常調用func3方法,代碼如下:

  1. public static void main(String[] args) { 
  2.     CDemo1 cd1=new CDemo1(); 
  3.     cd1.func3(); 

讀到這里發現接口中通過default關鍵字來進行接口實現的好處了吧,簡單四個字就是 “方便擴展” !通過這個技術可以做到在接口中新增加方法并且不會影響到已經實現了該接口的所有的類!包括jdk1.8新引入的Lambda表達式也是基于這一知識點來實現的!

接口中的static

與此同時,從jdk1.8開始,接口中可以通過static關鍵字來修飾方法,同樣可以對方法進行實現

  1. static  void func4(){ 
  2.     System.out.println("this is static func4"); 

調用方法也非常的簡單,接口.static 方法,例如:

  1. IDemo.func4(); 

大家可以這樣理解,接口中的static方法可以作為工具方法來提供給大家進行方便調用!

原文鏈接:https://www.toutiao.com/a7049532812554355238/

延伸 · 閱讀

精彩推薦
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
主站蜘蛛池模板: 毛片视频网站在线观看 | 美女张开腿让男人桶的 视频 | 舔到喷水 | 国产免费一区二区 | 国产免费丝袜调教视频 | 国产成人免费 | 免费我看视频在线观看 | 亚洲精品国精品久久99热 | 精品国产乱码久久久久久免费流畅 | 91入口免费网站大全 | 双性受合不垅腿攻np | 日韩成本大片35分钟免费播放 | 免费观看a毛片一区二区不卡 | 91制片厂制作传媒网站 | 艾秋麻豆果冻剧传媒在线播放 | 高清一区| yy3341殇情影院理论片 | a级片欧美 | 免费视频片在线观看大片 | 欧美18-19 | 果冻传媒在线播放1 | 成人啪啪漫画全文阅读 | 日本大巴车强thepro | 34看网片午夜理 | 5g影院天天5g天天爽大陆 | 亚洲波多野结衣日韩在线 | 好大用力深一点女公交车 | 久久强奷乱码老熟女 | 国产极品麻豆91在线 | 国产一级毛片潘金莲的奶头 | 成年人在线免费看 | 欧美日韩亚洲国内综合网俺 | 91视在线国内在线播放酒店 | 国产黄频在线观看高清免费 | 亚洲免费色 | 亚洲成av人在线视 | 男人捅女人漫画 | 四虎网址 | hezyo加勒比一区二区三区 | 无遮18禁在线永久免费观看挡 | yjsp妖精视频在线观看免费 |