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

Java8中的default方法詳解

 更新時間:2015年03月09日 10:30:30   投稿:junjie  
這篇文章主要介紹了Java8中的default方法詳解,Java 8新增了default方法,它可以在接口添加新功能特性,而且還不影響接口的實現(xiàn)類,需要的朋友可以參考下

Java 8新增了default方法,它可以在接口添加新功能特性,而且還不影響接口的實現(xiàn)類。下面我們通過例子來說明這一點。

復(fù)制代碼 代碼如下:

public class MyClass implements InterfaceA {
 public static void main(String[] args){
 }
 
 @Override
 public void saySomething() {
  // TODO Auto-generated method stub
 }
}

interface InterfaceA{
 public void saySomething();
}

上面的代碼顯示了MyClass類實現(xiàn)了InterfacesA接口的saySomething()方法?,F(xiàn)在我們?yōu)镮nterfacesA接口新增一個sayHi()方法。這么做的話,MyClass類是無法通過編譯的,除非我們提供了sayHi()的實現(xiàn)方法。

Default方法是非常有用的,通過在接口定義的方法的訪問修飾符前加上關(guān)鍵字default,那么實現(xiàn)類就無需提供該方法的實現(xiàn)了。比如:

復(fù)制代碼 代碼如下:

public class MyClass implements InterfaceA {
 public static void main(String[] args){
 }
 
 @Override
 public void saySomething() {
  // TODO Auto-generated method stub
 }
}

interface InterfaceA{
 public void saySomething();
 default public void sayHi(){
  System.out.println("Hi");
 }
}

要注意,我們必須提供所有的default方法的實現(xiàn)。因此,default方法使我們的代碼更加靈活,在接口中也可以寫方法實現(xiàn)了。實現(xiàn)的方法會作為默認的方法實現(xiàn)。
那么,多接口存在沖突該怎么辦?

由于Java類可以實現(xiàn)多個接口,那么就可能存在這樣的情況:兩個或多個接口都有一個同名的default接口方法,從而造成沖突。因為Java虛擬機在程序運行時,并不清楚你要使用哪一個default方法。這會導(dǎo)致編譯錯誤。

讓我們來看看下面的例子。

復(fù)制代碼 代碼如下:

public class MyClass implements InterfaceA, InterfaceB {
 public static void main(String[] args){
  MyClass mc = new MyClass();
  mc.sayHi();
 }
 
 @Override
 public void saySomething() {
  // TODO Auto-generated method stub
 }
}

interface InterfaceA{
 public void saySomething();
 default public void sayHi(){
  System.out.println("Hi from InterfaceA");
 }
}

interface InterfaceB{
 default public void sayHi(){
  System.out.println("Hi from InterfaceB");
 }
}

它是通不過編譯的,會報以下錯誤:
“Duplicate default methods named sayHi with the parameters () and () are inherited from the types InterfaceB and InterfaceA.”
除非在MyClass類中重寫了sayHi()方法:

復(fù)制代碼 代碼如下:

public class MyClass implements InterfaceA, InterfaceB {
 public static void main(String[] args){
  MyClass mc = new MyClass();
  mc.sayHi();
 }
 
 @Override
 public void saySomething() {
  // TODO Auto-generated method stub
 }
 
 @Override
 public void sayHi(){
  System.out.println("implemetation of sayHi() in MyClass");
 }
}

interface InterfaceA{
 public void saySomething();
 default public void sayHi(){
  System.out.println("Hi from InterfaceA");
 }
}

interface InterfaceB{
 default public void sayHi(){
  System.out.println("Hi from InterfaceB");
 }
}

如果想指定調(diào)用哪一個接口的sayHi()方法,我們可以這么做:

復(fù)制代碼 代碼如下:

public class MyClass implements InterfaceA, InterfaceB {
 public static void main(String[] args){
  MyClass mc = new MyClass();
  mc.sayHi();
 }
 
 @Override
 public void saySomething() {
  // TODO Auto-generated method stub
 }
 
 @Override
 public void sayHi(){
  InterfaceA.super.sayHi();
 }
}

interface InterfaceA{
 public void saySomething();
 default public void sayHi(){
  System.out.println("Hi from InterfaceA");
 }
}

interface InterfaceB{
 default public void sayHi(){
  System.out.println("Hi from InterfaceB");
 }
}

答案是不是很簡單呢?

相關(guān)文章

  • Spring 中優(yōu)雅的獲取泛型信息的方法

    Spring 中優(yōu)雅的獲取泛型信息的方法

    這篇文章主要介紹了Spring 中優(yōu)雅的獲取泛型信息的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • springboot使用Gateway做網(wǎng)關(guān)并且配置全局攔截器的方式

    springboot使用Gateway做網(wǎng)關(guān)并且配置全局攔截器的方式

    本文介紹了Spring Cloud Gateway的使用,包括為什么需要使用網(wǎng)關(guān)、如何簡單使用、斷言工廠路由、路由過濾器、全局過濾器以及跨域請求配置,感興趣的朋友一起看看吧
    2025-02-02
  • 一篇文章帶你入門java代理模式

    一篇文章帶你入門java代理模式

    這篇文章主要介紹了Java代理模式,結(jié)合實例形式詳細分析了java基本數(shù)據(jù)類型、數(shù)據(jù)類型轉(zhuǎn)換、算術(shù)運算符、邏輯運算符等相關(guān)原理與操作技巧,需要的朋友可以參考下
    2021-08-08
  • springboot整合mybatis中的問題及出現(xiàn)的一些問題小結(jié)

    springboot整合mybatis中的問題及出現(xiàn)的一些問題小結(jié)

    這篇文章主要介紹了springboot整合mybatis中的問題及出現(xiàn)的一些問題小結(jié),本文給出了解決方案,需要的朋友可以參考下
    2018-11-11
  • 分析JVM的組成結(jié)構(gòu)

    分析JVM的組成結(jié)構(gòu)

    JVM(虛擬機):指以軟件的方式模擬具有完整硬件系統(tǒng)功能、運行在一個完全隔離環(huán)境中的完整計算機系統(tǒng) ,是物理機的軟件實現(xiàn)。JVM和VMware,Virtual Box等虛擬機一樣,都是運行在操作系統(tǒng)之上的計算機系統(tǒng)
    2021-06-06
  • 那些年用httpclient時踩過的一些坑

    那些年用httpclient時踩過的一些坑

    這篇文章主要給大家介紹了關(guān)于那些年用httpclient時踩過的一些坑,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用httpclient具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • SpringBoot測試類注入Bean失敗的原因及分析

    SpringBoot測試類注入Bean失敗的原因及分析

    SpringBoot 2.2版本前后測試類有所變化,2.2版本之后使用JUnit 5,導(dǎo)入注解@SpringBootTest和@Test來自junit.jupiter.api包;而2.2版本之前使用JUnit 4,需要額外導(dǎo)入@RunWith注解來自junit.runner包,無論哪個版本,都需確保測試類和啟動類的包名一致
    2024-09-09
  • Java常用正則表達式(身份證號、郵箱、手機號)格式校驗代碼示例

    Java常用正則表達式(身份證號、郵箱、手機號)格式校驗代碼示例

    這篇文章主要介紹了Java常用正則表達式格式校驗的相關(guān)資料,講解了使用正則表達式校驗身份證號、郵箱和手機號,并允許輸入為空字符串,給出了詳細的代碼示例,需要的朋友可以參考下
    2025-04-04
  • Java用編碼檢測代理ip是否有效

    Java用編碼檢測代理ip是否有效

    這篇文章主要為大家詳細介紹了Java如何使用編碼檢測代理ip是否有效,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • springBoot接入阿里云oss的實現(xiàn)步驟

    springBoot接入阿里云oss的實現(xiàn)步驟

    這篇文章主要介紹了springBoot接入阿里云oss的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評論

泊头市| 郑州市| 吉林省| 察隅县| 土默特右旗| 始兴县| 河北省| 册亨县| 博爱县| 黄浦区| 五原县| 临夏县| 浦东新区| 翁牛特旗| 上虞市| 锡林郭勒盟| 达拉特旗| 西畴县| 济宁市| 珲春市| 长阳| 永德县| 旌德县| 当雄县| 京山县| 吉木乃县| 仲巴县| 宁德市| 大化| 金乡县| 肃北| 潮安县| 高平市| 云安县| 图木舒克市| 衡山县| 弥勒县| 肃北| 同江市| 洞口县| 九龙坡区|