成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解Java8接口中引入Default關(guān)鍵字的本質(zhì)原因

開(kāi)發(fā) 后端
熟悉java接口的同學(xué)都知道,接口被某些類實(shí)現(xiàn)后,一旦在接口中增加了新方法,那么實(shí)現(xiàn)該接口的所有類都要實(shí)現(xiàn)這個(gè)新增的方法(即使這個(gè)新增的接口對(duì)某些類沒(méi)有用處)。

接口的常規(guī)實(shí)現(xiàn)方式

熟悉java接口的同學(xué)都知道,接口被某些類實(shí)現(xiàn)后,一旦在接口中增加了新方法,那么實(shí)現(xiàn)該接口的所有類都要實(shí)現(xiàn)這個(gè)新增的方法(即使這個(gè)新增的接口對(duì)某些類沒(méi)有用處)。

定義一個(gè)接口

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

 類CDemo1實(shí)現(xiàn)接口IDemo

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

類CDemo2實(shí)現(xiàn)接口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中需要強(qiáng)制實(shí)現(xiàn)方法func2(),如下圖所示:

詳解Java8接口中引入default關(guān)鍵字的本質(zhì)原因
詳解Java8接口中引入default關(guān)鍵字的本質(zhì)原因

接口中的default

上面的實(shí)例導(dǎo)致了前面提出的那個(gè)問(wèn)題,一旦在接口中增加了新方法,那么已經(jīng)實(shí)現(xiàn)了該接口的所有的類都要實(shí)現(xiàn)這個(gè)新增的方法!那么,如果是JDK中的某個(gè)核心接口需要變更,需要新增某些方法呢?這個(gè)工作量更是可想而知,我們來(lái)看一下java.util.Collection這個(gè)接口,它在jdk1.7中的方法包括:

詳解Java8接口中引入default關(guān)鍵字的本質(zhì)原因

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

詳解Java8接口中引入default關(guān)鍵字的本質(zhì)原因

其中新增的接口,都用default來(lái)修飾(jdk1.7升級(jí)到j(luò)dk1.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; 

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

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

 然后查看類CDemo1,一切正常,沒(méi)有任何錯(cuò)誤提示:

詳解Java8接口中引入default關(guān)鍵字的本質(zhì)原因

實(shí)例化CDemo1后,可以正常調(diào)用func3方法,代碼如下:

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

讀到這里發(fā)現(xiàn)接口中通過(guò)default關(guān)鍵字來(lái)進(jìn)行接口實(shí)現(xiàn)的好處了吧,簡(jiǎn)單四個(gè)字就是 “方便擴(kuò)展” !通過(guò)這個(gè)技術(shù)可以做到在接口中新增加方法并且不會(huì)影響到已經(jīng)實(shí)現(xiàn)了該接口的所有的類!包括jdk1.8新引入的Lambda表達(dá)式也是基于這一知識(shí)點(diǎn)來(lái)實(shí)現(xiàn)的!

接口中的static

與此同時(shí),從jdk1.8開(kāi)始,接口中可以通過(guò)static關(guān)鍵字來(lái)修飾方法,同樣可以對(duì)方法進(jìn)行實(shí)現(xiàn)

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

調(diào)用方法也非常的簡(jiǎn)單,接口.static 方法,例如:

  1. IDemo.func4(); 

大家可以這樣理解,接口中的static方法可以作為工具方法來(lái)提供給大家進(jìn)行方便調(diào)用!

 

責(zé)任編輯:姜華 來(lái)源: 今日頭條
相關(guān)推薦

2022-11-12 18:32:50

Golangomitemptyjson

2021-02-01 13:10:07

Staticc語(yǔ)言UNIX系統(tǒng)

2009-09-01 15:25:04

C# default關(guān)

2013-01-30 10:12:14

Pythonyield

2009-09-02 09:24:03

C# this關(guān)鍵字

2025-06-13 08:00:00

Java并發(fā)編程volatile

2009-09-28 11:34:49

Javascript

2011-06-14 13:26:27

volatile

2017-05-27 20:59:30

Java多線程synchronize

2021-07-27 07:31:16

單例模式關(guān)鍵字

2025-01-09 10:30:40

2012-03-01 12:50:03

Java

2010-02-05 15:51:06

C++ explici

2023-03-09 07:38:58

static關(guān)鍵字狀態(tài)

2023-11-10 09:29:30

MySQLExplain

2020-08-10 08:00:13

JavaFinal關(guān)鍵字

2012-06-02 00:53:39

Javafinally

2024-03-15 11:52:03

C++關(guān)鍵字編程

2023-09-22 22:27:54

autoC++11

2024-03-21 06:13:41

NULLC++關(guān)鍵字
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品高清在线 | 久久69精品久久久久久久电影好 | 国产福利在线小视频 | 精品国产一区二区三区久久狼黑人 | 久久久成人动漫 | 精品久久一区 | 91在线中文字幕 | 国产一级视频在线 | 一区二区三区视频免费观看 | 日韩精品成人 | 天天搞夜夜操 | 真人女人一级毛片免费播放 | 国产日韩在线观看一区 | 狠狠艹 | 国产精品视频观看 | a久久| 黄色一级毛片 | 天天干干 | 国内精品一区二区 | 亚洲人成在线观看 | 永久精品| 特黄特黄a级毛片免费专区 av网站免费在线观看 | 精品美女久久久 | 麻豆av网站 | 精品国产欧美一区二区三区成人 | 中文字幕一区二区三区乱码在线 | 天天色天天射天天干 | 天堂一区 | 激情一区二区三区 | 久久久久久国产精品 | 中文字幕日韩欧美 | 久久精品国产久精国产 | 九九综合九九 | 日韩中文在线 | 色婷婷av一区二区三区软件 | 欧美精品一区二区三区四区五区 | 中文字幕第十页 | 在线看一区二区 | 99久久精品国产一区二区三区 | 一区二区三区观看视频 | 久久福利电影 |