java8新特性的接口默认方法

Java8新特性之接口默认方法

JAVA8 已经发布好久,并且毫无疑问,java8 是自 java5(2004年发布)以后的最重要的版本。其中包括语言、编译器、库、工具和 JVM 等诸多方面的新特性。Java8 新特性列表以下:java

  • 接口默认方法
  • 函数式接口
  • Lambda 表达式
  • 方法引用
  • Stream
  • Optional 类
  • Date API
  • Base64
  • 重复注解与类型注解

接口默认方法

一、什么是接口默认方法

从 Java8 开始,程序容许在接口中包含带有具体实现的方法,使用 default 修饰,这类方法就是默认方法。默认方法在接口中能够添加多个,而且 Java8 提供了不少对应的接口默认方法。编程

二、设计接口默认方法好处

使用接口编程的好处是的开发是面向抽象而再也不是面向具体来编程,使得程序变得很灵活,缺陷是,当须要修改接口时候,此时对应须要修改所有实现该接口的类,举个例子, java 8 以前对于咱们经常使用的集合框架没有 foreach 方法,一般能想到的解决办法是在 JDK 里给相关的接口添加新的方法及实现。从 Java8 开始,引入了接口默认方法,这样的好处也是很明显的,首先解决了 Java8 之前版本接口兼容性问题,同时对于咱们之后的程序开发,也能够在接口子类中直接使用接口默认方法,而再也不须要再各个子类中各自实现响应接口方法。框架

三、默认方法

jdk8 中,接口能够包含实现方法,须要使用 default 修饰,此类方法称为默认方法。默认方法在接口中必须提供实现,在实现类中能够按需重写。默认方法只能在实现类中或经过实现类对象调用。注意:当多个父接口中存在相同的默认方法时,子类中以就近原则继承。ide

public interface IMathOperation {
   /**
    * 定义接口默认方法 支持方法形参
    */
    default void print(){
        System.out.println("这是数值运算基本接口。。。");
      }
}

四、静态方法

静态方法即经过 static 修饰的方法。接口中静态方法页也必须实现,提供了能够直接经过接口调用方法的方式。函数

public interface IMathOperation {
   /**
    * 定义接口默认方法 支持方法形参
    */
       default void print(){
       System.out.println("这是数值运算基本接口。。。");
    }
   
    /**
    * 定义静态默认方法
    */
       static void version(){
       System.out.println("这是1.0版简易计算器");
      }    
}

五、接口默认方法使用

  • 定义 IMathOperation 接口并提供默认打印方法
public interface IMathOperation {
   /**
    * 定义接口默认方法 支持方法形参
    */
       default void print(){
        System.out.println("这是数值运算基本接口。。。");
      }
   
    /**
    * 定义静态默认方法
    */
       static void version(){
       System.out.println("这是1.0版简易计算器");
      }

   /**
    * 整数加法运算方法
    * @param a
    * @param b
    * @return
    */
       public int add(int a,int b);
}
  • 子类实现

定义 MathOperationImpl 子类 实现 IMathOperation 接口工具

img

这里能够看到,在实现 IMathOperation 接口时能够选择实现(也能够不实现 ,在子类方法中直接使用)接口默认方法。学习

public class MathOperationImpl implements  IMathOperation {
   @Override
   public int add(int a, int b) {
       // 子类中能够直接调用父类接口默认方法
       IMathOperation.super.print();
       // 调用父类静态默认方法
       IMathOperation.version();
       return a+b;
      }
}
最全的学习资料 → 卫星:lezijie007(暗号:思否33)

多个默认方法状况

使用 Java8 开发应用程序是,子类实现多个接口时,对于接口默认方法定义可能会出现多个默认方法,而且接口默认方法可能会出现同名状况,此时对于子类在实现或者调用时一般遵循三条原则:spa

一、类中的方法优先级最高设计

二、若是第一条没法进行判断,那么子接口的优先级更高:函数签名相同时,优先选择拥有最具体实现的默认方法的接口,即若是B继承了A,那么B就比A更加具体code

三、若是仍是没法判断,继承了多个接口的类必须经过显示覆盖和调用指望的方法,显示地选择使用哪个默认方法的实现

示例代码以下:

/**
* 定义手机接口 提供默认info方法
*/
public interface Phone {
   default void info(){
       System.out.println("这是一部手机");
      }
}


/**
* 定义MiPhone子接口 并继承 Phone 父接口 同时也提供info方法
*/
public interface MiPhone extends Phone{
   default void info(){
       System.out.println("这是一部小米手机");
      }
}


/**
* 实现 Phone MiPhone 接口
*/
public class M2sPhone implements Phone,MiPhone {

   public static void main(String[] args) {
       new M2sPhone().info();
      }
}

打印结果: 
这是一部小米手机

jdk8 已经发布好久了,并且毫无疑问,java8 是自 java5(2004年发布)以后的最重要的版本。其中包括语言、编译器、库、工具和 JVM 等诸多方面的新特性。

相关文章
相关标签/搜索