美文网首页
Java8新特征之接口默认方法

Java8新特征之接口默认方法

作者: 天上的小仙女呀 | 来源:发表于2020-10-19 15:01 被阅读0次
image

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

  • 接口默认方法

  • 函数式接口

  • Lambda 表达式

  • 方法引用

  • Stream

  • Optional 类

  • Date API

  • Base64

  • 重复注解与类型注解

01 接口默认方法

1、什么是接口默认方法

从Java8开始,程序允许在接口中包含带有具体实现的方法,使用default修饰,这类方法就是默认方法。默认方法在接口中可以添加多个,并且Java8提供了很多对应的接口默认方法。

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

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

3、默认方法

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


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

4、静态方法

静态方法即通过static 修饰的方法。接口中静态方法页也必须实现,提供了可以直接通过接口调用方法的方式。


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

5、接口默认方法使用

  • 定义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 接口

image

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

public class MathOperationImpl implements  IMathOperation {
 @Override
 public int add(int a, int b) {
 // 子类中可以直接调用父类接口默认方法
 IMathOperation.super.print();
 // 调用父类静态默认方法
 IMathOperation.version();
 return a+b;
 }
}

02 多个默认方法情况

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

1、类中的方法优先级最高

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

3、如果还是无法判断,继承了多个接口的类必须通过显示覆盖和调用期望的方法,显示地选择使用哪一个默认方法的实现

示例代码如下:

/**
* 定义手机接口 提供默认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等诸多方面的新特性。

相关文章

  • Java 8 之默认方法和静态接口方法

    转载自30分钟入门Java8之默认方法和静态接口方法 默认方法 默认方法让我们能给我们的软件库的接口增加新的方法,...

  • Java8新特征之接口默认方法

    JAVA8已经发布很久,而且毫无疑问,java8是自java5(2004年发布)之后的最重要的版本。其中包括语言、...

  • java8 新特性总结

    java8新特性 1.接口方法默认实现:java8中接口方法可以有默认实现,需要加入default关键字。 2.L...

  • Java8 新特性与 lambda 表达式笔记

    java8 的接口新特性 先看看下面的接口的默认方法和静态方法,感受一下: 默认实现方法 如果多继承状态下有默认方...

  • java8接口中的默认方法

    java8接口中的默认方法 概述默认方法 java8中可以在接口中定义一个default修饰的方法,例如: 这样任...

  • 接口(interface)和抽象类(abstract class

    1、接口中的方法默认都是 public,所有方法在接口中不能有默认实现(Java8 开始接口方法可以有默认实现),...

  • 接口(interface)和抽象类(abstract class

    接口中的方法默认都是 public,所有方法在接口中不能有默认实现(Java8 开始接口方法可以有默认实现),而抽...

  • 1.Java8你需要了解的

    一、Java8新增了哪些新特性: 新特性Java8 新增了非常多的特性,我们主要讨论以下几个: 1、接口默认方法:...

  • 默认方法

    什么是默认方法 java8引入了一个新的功能,叫默认方法,通过默认方法你可以指定接口方法的默认实现。换句话说:就是...

  • 默认方法

    默认方法 声明:java8新特性系列为个人学习笔记,参考地址点击这里,侵删!! Java 8 新增了接口的默认方法...

网友评论

      本文标题:Java8新特征之接口默认方法

      本文链接:https://www.haomeiwen.com/subject/guwkmktx.html