最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

寫在前面

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

接口中的默認方法

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

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

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

默認方法的原則

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

若一個接口中定義了一個默認方法,而另外一個父類或接口中又定義了一個同名的方法時,遵循如下的原則。

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

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

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

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

public class SubClass extends MyClass implements MyFunction{
  
}

接下來,我們創(chuàng)建一個SubClassTest類,對SubClass類進行測試,如下所示。

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

運行上述程序,會輸出字符串:MyClass。

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

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

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

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

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

此時,MyClass類中的getName方法返回的是:interface。

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

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

此時,MyClass類中的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新特性核心知識圖,祝大家在學習Java8新特性時少走彎路。

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

相關文章

  • Spring前后端跨域請求設置代碼實例

    Spring前后端跨域請求設置代碼實例

    這篇文章主要介紹了Spring前后端跨域請求設置代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • Java自定義注解實現(xiàn)數(shù)據(jù)脫敏

    Java自定義注解實現(xiàn)數(shù)據(jù)脫敏

    在實際開發(fā)中經(jīng)常會遇到有一些信息不能全部展示用戶,需要隱藏(可以叫脫敏),所以本文為大家分享了利用自定義注解實現(xiàn)數(shù)據(jù)脫敏的示例代碼,需要的可以參考下
    2023-07-07
  • java設計模式原型模式與享元模式調(diào)優(yōu)系統(tǒng)性能詳解

    java設計模式原型模式與享元模式調(diào)優(yōu)系統(tǒng)性能詳解

    這篇文章主要為大家介紹了java設計模式原型模式與享元模式調(diào)優(yōu)系統(tǒng)性能方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • springboot整合freemarker的踩坑及解決

    springboot整合freemarker的踩坑及解決

    這篇文章主要介紹了springboot整合freemarker的踩坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 一文詳解Java抽象類到底有多抽象

    一文詳解Java抽象類到底有多抽象

    這篇文章主要介紹了一文詳解Java抽象類到底有多抽象,抽象方法所在的類必須是抽象類,子類若繼承了一個抽象類,就必須覆寫父類的所有抽象方法,這里的子類是普通類,是強制要求覆寫所有抽象方法,但是如果子類也是一個抽象類,那么就可以不覆寫
    2022-06-06
  • java ant 配置及構建項目圖文教程

    java ant 配置及構建項目圖文教程

    以下是對java ant配置及構建項目進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • SpringBoot優(yōu)雅的進行全局異常處理的實現(xiàn)步驟

    SpringBoot優(yōu)雅的進行全局異常處理的實現(xiàn)步驟

    在軟件開發(fā)的世界里,異常處理是保證系統(tǒng)穩(wěn)定性和用戶體驗的關鍵因素之一,尤其是在構建基于微服務架構的應用時,SpringBoot提供了一套強大的工具來幫助開發(fā)者管理這些異常,所以本文給大家介紹了SpringBoot如何優(yōu)雅的進行全局異常處理,需要的朋友可以參考下
    2025-02-02
  • Java 用反射設置對象的屬性值實例詳解

    Java 用反射設置對象的屬性值實例詳解

    這篇文章主要介紹了Java 用反射設置對象的屬性值實例詳解的相關資料,需要的朋友可以參考下
    2017-05-05
  • JavaCV獲取視頻文件時長的方法

    JavaCV獲取視頻文件時長的方法

    這篇文章主要為大家詳細介紹了JavaCV獲取視頻文件時長的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Java中的HashMap和Hashtable區(qū)別解析

    Java中的HashMap和Hashtable區(qū)別解析

    這篇文章主要介紹了Java中的HashMap和Hashtable區(qū)別解析,HashMap和Hashtable都實現(xiàn)了Map接口,但決定用哪一個之前先要弄清楚它們之間的區(qū)別,主要的區(qū)別有線程安全性、同步和速度,需要的朋友可以參考下
    2023-11-11

最新評論

泸定县| 贞丰县| 麻江县| 龙江县| 藁城市| 浙江省| 古田县| 法库县| 嘉善县| 芦溪县| 临江市| 环江| 东莞市| 定远县| 容城县| 噶尔县| 长治市| 廉江市| 徐州市| 泸定县| 名山县| 赞皇县| 浙江省| 内江市| 沙雅县| 吴忠市| 奉贤区| 灵丘县| 南宫市| 华池县| 砚山县| 馆陶县| 万年县| 临桂县| 利川市| 商都县| 香港 | 新乡县| 安多县| 德庆县| 平湖市|