欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java8新特性之接口中的默認(rèn)方法和靜態(tài)方法

 更新時(shí)間:2020年07月22日 11:28:43   作者:冰河團(tuán)隊(duì)  
這篇文章主要介紹了Java8新特性之接口中的默認(rèn)方法和靜態(tài)方法的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

寫(xiě)在前面

在Java8之前的版本中,接口中只能聲明常量和抽象方法,接口的實(shí)現(xiàn)類(lèi)中必須實(shí)現(xiàn)接口中所有的抽象方法。而在Java8中,接口中可以聲明默認(rèn)方法和靜態(tài)方法,本文,我們就一起探討下接口中的默認(rèn)方法和靜態(tài)方法。

接口中的默認(rèn)方法

Java 8中允許接口中包含具有具體實(shí)現(xiàn)的方法,該方法稱(chēng)為“默認(rèn)方法”,默認(rèn)方法使用 default 關(guān)鍵字修飾 。

例如,我們可以定義一個(gè)接口MyFunction,其中,包含有一個(gè)默認(rèn)方法getName,如下所示。

public interface MyFunction<T>{
  T get(Long id);
  default String getName(){
    return "binghe";
  }
}

默認(rèn)方法的原則

在Java8中,默認(rèn)方法具有“類(lèi)優(yōu)先”的原則。

若一個(gè)接口中定義了一個(gè)默認(rèn)方法,而另外一個(gè)父類(lèi)或接口中又定義了一個(gè)同名的方法時(shí),遵循如下的原則。

1.選擇父類(lèi)中的方法。如果一個(gè)父類(lèi)提供了具體的實(shí)現(xiàn),那么接口中具有相同名稱(chēng)和參數(shù)的默認(rèn)方法會(huì)被忽略。

例如,現(xiàn)在有一個(gè)接口為MyFunction,和一個(gè)類(lèi)MyClass,如下所示。

  • MyFunction接口
public interface MyFunction{
  default String getName(){
    return "MyFunction";
  }
}
  • MyClass類(lèi)
public class MyClass{
  public String getName(){
    return "MyClass";
  }
}

此時(shí),創(chuàng)建SubClass類(lèi)繼承MyClass類(lèi),并實(shí)現(xiàn)MyFunction接口,如下所示。

public class SubClass extends MyClass implements MyFunction{
  
}

接下來(lái),我們創(chuàng)建一個(gè)SubClassTest類(lèi),對(duì)SubClass類(lèi)進(jìn)行測(cè)試,如下所示。

public class SubClassTest{
  @Test
  public void testDefaultFunction(){
    SubClass subClass = new SubClass();
    System.out.println(subClass.getName());
  }
}

運(yùn)行上述程序,會(huì)輸出字符串:MyClass。

2.接口沖突。如果一個(gè)父接口提供一個(gè)默認(rèn)方法,而另一個(gè)接口也提供了一個(gè)具有相同名稱(chēng)和參數(shù)列表的方法(不管方法是否是默認(rèn)方法), 那么必須覆蓋該方法來(lái)解決沖突。

例如,現(xiàn)在有兩個(gè)接口,分別為MyFunction和MyInterface,各自都有一個(gè)默認(rèn)方法getName(),如下所示。

  • MyFunction接口
public interface MyFunction{
  default String getName(){
    return "function";
  }
}
  • MyInterface接口
public interface MyInterface{
  default String getName(){
    return "interface";
  }
}

實(shí)現(xiàn)類(lèi)MyClass同時(shí)實(shí)現(xiàn)了MyFunction接口和MyInterface接口,由于MyFunction接口和MyInterface接口中都存在getName()默認(rèn)方法,所以,MyClass必須覆蓋getName()方法來(lái)解決沖突,如下所示。

public class MyClass{
  @Override
  public String getName(){
    return MyInterface.super.getName();
  }
}

此時(shí),MyClass類(lèi)中的getName方法返回的是:interface。

如果MyClass中的getName()方法覆蓋的是MyFunction接口的getName()方法,如下所示。

public class MyClass{
  @Override
  public String getName(){
    return MyFunction.super.getName();
  }
}

此時(shí),MyClass類(lèi)中的getName方法返回的是:function。

接口中的靜態(tài)方法

在Java8中,接口中允許添加靜態(tài)方法,使用方式接口名.方法名。例如MyFunction接口中定義了靜態(tài)方法send()。

public interface MyFunction{
  default String getName(){
    return "binghe";
  }
  static void send(){
    System.out.println("Send Message...");
  }
}

我們可以直接使用如下方式調(diào)用MyFunction接口的send靜態(tài)方法。

MyFunction.send();

最后,附上Java8新特性核心知識(shí)圖,祝大家在學(xué)習(xí)Java8新特性時(shí)少走彎路。

以上就是Java8新特性之接口中的默認(rèn)方法和靜態(tài)方法的詳細(xì)內(nèi)容,更多關(guān)于JAVA8 新特性的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java順時(shí)針打印矩陣

    Java順時(shí)針打印矩陣

    這篇文章主要為大家詳細(xì)介紹了Java順時(shí)針打印矩陣,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • Java中的TreeMap底層源碼分析

    Java中的TreeMap底層源碼分析

    這篇文章主要介紹了Java中的TreeMap底層源碼分析,TreeMap與Hashmap、LinkedHashMap不同,他的底層不再是數(shù)組,而是一顆紅黑樹(shù),在插入、刪除或者替換元素時(shí),TreeMap能按照事先約定的順序來(lái)對(duì)key進(jìn)行排序和迭代查詢(xún),需要的朋友可以參考下
    2023-12-12
  • 使用Java進(jìn)行FreeMarker的web模板開(kāi)發(fā)的基礎(chǔ)教程

    使用Java進(jìn)行FreeMarker的web模板開(kāi)發(fā)的基礎(chǔ)教程

    這篇文章主要介紹了使用Java進(jìn)行FreeMarker模板引擎開(kāi)發(fā)的基礎(chǔ)教程,文中針對(duì)FreeMarker的網(wǎng)頁(yè)標(biāo)簽用法給出了一些例子,需要的朋友可以參考下
    2016-03-03
  • Java  中橋接模式——對(duì)象結(jié)構(gòu)型模式的實(shí)例詳解

    Java 中橋接模式——對(duì)象結(jié)構(gòu)型模式的實(shí)例詳解

    這篇文章主要介紹了Java 中橋接模式——對(duì)象結(jié)構(gòu)型模式的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文大家能掌握這部分知識(shí),需要的朋友可以參考下
    2017-09-09
  • 詳解SpringBoot中5種類(lèi)型參數(shù)傳遞和json數(shù)據(jù)傳參的操作

    詳解SpringBoot中5種類(lèi)型參數(shù)傳遞和json數(shù)據(jù)傳參的操作

    當(dāng)涉及到參數(shù)傳遞時(shí),Spring?Boot遵循HTTP協(xié)議,并支持多種參數(shù)傳遞方式,這些參數(shù)傳遞方式可以根據(jù)請(qǐng)求的不同部分進(jìn)行分類(lèi),
    2023-12-12
  • springboot構(gòu)造樹(shù)形結(jié)構(gòu)數(shù)據(jù)并查詢(xún)的方法

    springboot構(gòu)造樹(shù)形結(jié)構(gòu)數(shù)據(jù)并查詢(xún)的方法

    本文主要介紹了springboot怎樣構(gòu)造樹(shù)形結(jié)構(gòu)數(shù)據(jù)并查詢(xún),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 在Java中使用Jwt的示例代碼

    在Java中使用Jwt的示例代碼

    這篇文章主要介紹了在Java中使用Jwt的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Spring中的@ConditionalOnProperty注解使用詳解

    Spring中的@ConditionalOnProperty注解使用詳解

    這篇文章主要介紹了Spring中的@ConditionalOnProperty注解使用詳解,在 spring boot 中有時(shí)候需要控制配置類(lèi)是否生效,可以使用 @ConditionalOnProperty 注解來(lái)控制 @Configuration 是否生效,需要的朋友可以參考下
    2024-01-01
  • java使用tess4j進(jìn)行圖片文字識(shí)別功能

    java使用tess4j進(jìn)行圖片文字識(shí)別功能

    Tess4J?是Java?(JNA)?對(duì)?Tesseract?OCR?API?的封裝,Tess4J是java直接可使用的jar包,而Tesseract?OCR是支持Tess4J進(jìn)文件文字識(shí)別的基礎(chǔ),Tess4J可直接使用Maven方式引入,這篇文章主要介紹了java使用tess4j進(jìn)行圖片文字識(shí)別,需要的朋友可以參考下
    2023-04-04
  • SpringBoot整合spring-data-jpa的方法

    SpringBoot整合spring-data-jpa的方法

    這篇文章主要介紹了SpringBoot整合spring-data-jpa的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06

最新評(píng)論