程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java8接口的默許辦法

Java8接口的默許辦法

編輯:關於JAVA

Java8接口的默許辦法。本站提示廣大學習愛好者:(Java8接口的默許辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是Java8接口的默許辦法正文


Java8接口的默許辦法

甚麼是默許辦法,為何要有默許辦法?

簡略說,就是接口可以有完成辦法,並且不須要完成類去完成其辦法。只需在辦法名後面加個default症結字便可。

為何要有這個特征?起首,之前的接口是個雙刃劍,利益是面向籠統而不是面向詳細編程,缺點是,當須要修正接口時刻,須要修正全體完成該接口的類,今朝的 java 8之前的聚集框架沒有foreach辦法,平日能想到的處理方法是在JDK裡給相干的接口添加新的辦法及完成。但是,關於曾經宣布的版本,是沒法在給接口添加新辦法的同時不影響已有的完成。所以引進的默許辦法。他們的目標是為了使接口沒有引入與現有的完成不兼容成長。

如以下所示,

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

聲清楚明了一個接口,外面只要一個默許辦法。然後寫一個詳細的類完成這個接口,

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

再詳細的類外面不是必需重寫默許辦法,但必需要完成籠統辦法。

默許辦法的多重繼續
以下所示代碼,

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();//挪用B的辦法
    obj.doSomething();
  }
}

打印成果:

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()挪用的是B接口中的默許辦法。同時在B接口中的默許辦法有挪用了父接口中的默許辦法。

我們再來看一個例子,思慮一下在多重繼續中,假如湧現了同名的默許辦法,以下所示,

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();
  }
 
}

我們須要制訂挪用哪一個接口的默許辦法以下,

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

另外一個java8的接口默許辦法實例:

java8新增了接口的默許辦法, 也就是說在接口中也能夠有完成了, 這個完成辦法是默許的完成,你也能夠在接口的完成類裡對此默許辦法停止重寫。

以下實例:

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接口的默許辦法具體引見,願望對年夜家的進修有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved