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

Java8接口的默認方法

 更新時間:2016年01月23日 09:54:59   投稿:lijiao  
這篇文章主要為大家介紹了Java8接口的默認方法,還為大家默認方法的多重繼承,感興趣的朋友可以參考一下

Java8接口的默認方法

什么是默認方法,為什么要有默認方法?

簡單說,就是接口可以有實現(xiàn)方法,而且不需要實現(xiàn)類去實現(xiàn)其方法。只需在方法名前面加個default關鍵字即可。

為什么要有這個特性?首先,之前的接口是個雙刃劍,好處是面向抽象而不是面向具體編程,缺陷是,當需要修改接口時候,需要修改全部實現(xiàn)該接口的類,目前的 java 8之前的集合框架沒有foreach方法,通常能想到的解決辦法是在JDK里給相關的接口添加新的方法及實現(xiàn)。然而,對于已經(jīng)發(fā)布的版本,是沒法在給接口添加新方法的同時不影響已有的實現(xiàn)。所以引進的默認方法。他們的目的是為了使接口沒有引入與現(xiàn)有的實現(xiàn)不兼容發(fā)展。

如以下所示,

public interface Animal {
  default void eat() {
    System.out.println("animal eat default method");
  }
}

聲明了一個接口,里面只有一個默認方法。然后寫一個具體的類實現(xiàn)這個接口,

public class Dog implements Animal {
  public void sayHi() {
    System.out.println("dog");
  }
 
  public static void main(String args[]) {
    Dog dog = new Dog();
    dog.eat();
  }
}

再具體的類里面不是必須重寫默認方法,但必須要實現(xiàn)抽象方法。

默認方法的多重繼承
如下所示代碼,

public interface A {
 
  void doSomething();
 
  default void hello() {
    System.out.println("hello world from interface A");
  }
 
  default void foo() {
    System.out.println("foo from interface A");
  }
}
 
interface B extends A {
  default void hello() {
    System.out.println("hello world from interface B");
    A.super.hello();
    this.foo();
    A.super.foo();
  }
}
 
class C implements B, A {
 
  @Override
  public void doSomething() {
    System.out.println("c object need do something");
  }
 
  public static void main(String args[]) {
    A obj = new C();
    obj.hello();//調(diào)用B的方法
    obj.doSomething();
  }
}

打印結(jié)果:

hello world from interface B

hello world from interface A

foo from interface A

foo from interface A

c object need do something

obj.hello()調(diào)用的是B接口中的默認方法。同時在B接口中的默認方法有調(diào)用了父接口中的默認方法。

我們再來看一個例子,思考一下在多重繼承中,如果出現(xiàn)了同名的默認方法,如下所示,

public interface D {
  default void hello() {
    System.out.println("hello world from D");
  }
}
 
interface E {
  default void hello() {
    System.out.println("hello world from E");
  }
}
 
class F implements D, E {
 
  @Override
  public void hello() {
    System.out.println("hello world F class");
    D.super.hello();
    E.super.hello();
  }
 
  public static void main(String args[]) {
    F f = new F();
    f.hello();
  }
 
}

我們需要制定調(diào)用哪個接口的默認方法如下,

 D.super.hello();
 E.super.hello();

另一個java8的接口默認方法實例

java8新增了接口的默認方法, 也就是說在接口中也可以有實現(xiàn)了, 這個實現(xiàn)方法是默認的實現(xiàn),你也可以在接口的實現(xiàn)類里對此默認方法進行重寫。

如下實例:

public class AppInterfaceDefaultMethod {
 
  public static interface DefaultMethodDemo {
    //定義默認方法, 默認方法前面加default關鍵字, 后面跟方法聲明和方法體
    default void demo(String input) {
      System.out.println(input);
    }
 
    void doSomething();
  }
 
  public static class DemoClass implements DefaultMethodDemo {
    @Override
    public void doSomething() {
      System.out.println("do something");
    }
  }
 
  public static class DemoClassOverrideDemo implements DefaultMethodDemo {
    //重寫了默認方法
    @Override
    public void demo(String input) {
      System.out.println("demo " + input + " by override method");
    }
 
    @Override
    public void doSomething() {
 
      System.out.println("do something");
    }
  }
 
  public static void main(String[] args) {
    DefaultMethodDemo demo = new DemoClass();
    demo.demo("abc");
 
    DefaultMethodDemo demoOverride = new DemoClassOverrideDemo();
    demoOverride.demo("abc");
  }
}

以上就是關于Java8接口的默認方法詳細介紹,希望對大家的學習有所幫助。

相關文章

  • java實現(xiàn)在pdf模板的指定位置插入圖片

    java實現(xiàn)在pdf模板的指定位置插入圖片

    這篇文章主要為大家詳細介紹了java如何實現(xiàn)在pdf模板的指定位置插入圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • Java實現(xiàn)二分法變種的示例代碼

    Java實現(xiàn)二分法變種的示例代碼

    這篇文章主要為大家介紹了Java實現(xiàn)二分法變種的示例代碼復,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • Java日常練習題,每天進步一點點(40)

    Java日常練習題,每天進步一點點(40)

    下面小編就為大家?guī)硪黄狫ava基礎的幾道練習題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • IntelliJ IDEA Java項目手動添加依賴 jar 包的方法(圖解)

    IntelliJ IDEA Java項目手動添加依賴 jar 包的方法(圖解)

    這篇文章主要介紹了IntelliJ IDEA Java項目手動添加依賴 jar 包,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • java json 省市級聯(lián)實例代碼

    java json 省市級聯(lián)實例代碼

    這篇文章介紹了java json 省市級聯(lián)實例代碼,有需要的朋友可以參考一下
    2013-09-09
  • Java class文件格式之方法_動力節(jié)點Java學院整理

    Java class文件格式之方法_動力節(jié)點Java學院整理

    這篇文章主要為大家詳細介紹了Java class文件格式之方法的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • jvm原理之SystemGC源碼分析

    jvm原理之SystemGC源碼分析

    這篇文章主要介紹了jvm源碼分析之SystemGC的完全解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-01-01
  • shiro 與 SpringMVC的整合完美示例

    shiro 與 SpringMVC的整合完美示例

    shiro可以直接和spring整合,但是這樣需要單獨配置spring用于整合shiro,在配置springmvc,接下來通過實例代碼給大家介紹shiro 整合 SpringMVC 的方法,感興趣的朋友一起看看吧
    2021-08-08
  • 圖解JVM垃圾內(nèi)存回收算法

    圖解JVM垃圾內(nèi)存回收算法

    這篇文章主要介紹了圖解JVM垃圾內(nèi)存回收算法,由于年輕代堆空間的垃圾回收會很頻繁,因此其垃圾回收算法會更加重視回收效率,下面小編就和大家來一起學習一下吧
    2019-06-06
  • Java單測void類型的方法詳解

    Java單測void類型的方法詳解

    這篇文章主要給大家介紹了Java中單測void類型的方法,文中給出了詳細的示例代碼,相信對大家的理解和學習具有一定的參考借鑒價值,需要的朋友可以跟著小編下面來一起學習學習吧。
    2017-01-01

最新評論

兖州市| 乌什县| 江安县| 化州市| 上高县| 博白县| 长子县| 含山县| 内乡县| 正镶白旗| 桐庐县| 巨鹿县| 于都县| 石渠县| 扎鲁特旗| 广东省| 平顺县| 铜陵市| 正宁县| 老河口市| 越西县| 盘山县| 广平县| 张家港市| 朔州市| 陆河县| 紫云| 陕西省| 明水县| 齐齐哈尔市| 龙门县| 勐海县| 葵青区| 河北省| 时尚| 兴安盟| 两当县| 义乌市| 江永县| 霍林郭勒市| 崇明县|