美文网首页
Java8新特性:接口的默认方法

Java8新特性:接口的默认方法

作者: 悟纤 | 来源:发表于2018-07-21 16:28 被阅读0次

说明

(1)JDK版本:1.8.0_162

需求缘起:

Spring Boot 2.0有很多新的特性,但是这些特性是依赖JDK的版本是jdk 8+才能进行使用的,所以要学习Spring Boot2.0的新特性,要扫一下Java8的新特性,学习起来会比较轻松。在接下来的文章会会Java8的新特性进行的介绍下,然后再介绍Spring Boot2.0的新特性,另外Java8也有一些挺不错的特性,如果你的项目中已经升级到JDK1.8了,但是你还是使用旧的编码方式,那么就有点像是拿着一把宰牛刀去杀鸡了。
通过接下来的文章,那么你可以了解到:

(1)Java8的新特性,比如:接口默认方法、Lambda表达式、Stream API等。

(2)SpringBoot 2.0的新特性。

本篇文章主要介绍下:接口的默认方法。

一、接口的默认方法

JDk8在接口中新增了default方法和static方法,这两种方法可以有方法体。

1.1 default方法

jdk8以前的做法肯定是现在接口中定义这个抽象方法,然后所有实现类必须实现这个方法(不然接口中多出一个抽象方法,其他类都没有实现,编译是会报错的),如果实现类比较多,那改起来会很麻烦,这种情况下是不利于维护的。
那么我们在jdk8中就有了好的解决方式,就是在接口中加一个默认方法,这个默认方法有具体实现,这样就不用去修改实现类啦,很省事。
这里我们有一个计算器的代码:

接口类Calculator(代码支持左右滑动):

public interface Calculator {

    double add(double first, double second);
    double sub(double first, double second);
    double div(double first, double second);
    double mul(double first, double second);

}

实现类CalculatorImpl:

public class CalculatorImpl implements Calculator {

    public double add(double first,double second) {
        return first+second;
    }

    public double sub(double first,double second) {
        return first-second;
    }

    public double div(double first,double second) {
        return first/second;
    }

    public double mul(double first,double second) {
        return first*second;
    }

} 

这时候我们来了一个新的需求,我们希望支持三个数的相加,那么以前的做法就是在接口重新定义一个方法,然后再实现类进行实战,如果我们的接口被很多类实现了,那么就要修改特别多的地方,但是这个方法的实现大家都是一样的。JDK8就很好的解决了这个问题,只需要在接口中接入一个default method:

  default double addThree(double first, double second, double Third){
        return first + second + Third;
    }

    double add(double first, double second);
    double sub(double first, double second);
    double div(double first, double second);
    double mul(double first, double second);

}
   接口的实现都不需要改变,如果有实现类的具体实现方式不一样,那么可以方法的重写进行实现。

   Default方法有如下特点:
(1)default方法可以被子接口继承亦可被其实现类所调用。

(2)default方法被继承时,可以被子接口覆写

1.2 static方法

接口里的静态方法,即static修饰的有方法体的方法不会被继承或者实现,但是静态变量会被继承。看下面最简答的使用方式:
public interface Calculator {
    default double addThree(double first, double second, double Third){
        return first + second + Third;
    }

    static int randNumber(int min,int max) {
        return new Random().nextInt(max-min+1)+min;
    }

    double add(double first, double second);
    double sub(double first, double second);
    double div(double first, double second);
    double mul(double first, double second);
}

在这里我们为Calculator增加了一个静态的方法randNumber,产生随机数[min,max],这样就可以使用Calculator.randNumber(3,10)进行调用,那么就可以随机获取[3,10]的随机数。

   这个static方法还特别有意思,还记得我们以前的静态静态工厂类嘛:
public class CalculatorFactory {
    private CalculatorFactory() {};
    public static Calculator getInstance() {
        return new CalculatorImpl();
    }
}

调用方式:

double rs1 = CalculatorFactory.getInstance().add(2, 3);
System.out.println("rs1="+rs1);

现在有了接口中的静态方法怎么解决呢?就是在接口中加一个静态方法就可以实现了:

public interface Calculator {
    default double addThree(double first, double second, double Third){
        return first + second + Third;
    }

    static int randNumber(int min,int max) {
        return new Random().nextInt(max-min+1)+min;
    }

    static Calculator getInstance() {
        return new CalculatorImpl();
    }

    double add(double first, double second);
    double sub(double first, double second);
    double div(double first, double second);
    double mul(double first, double second);
}

调用方式:

double rs2 = Calculator.getInstance().add(2, 3);
System.out.println("rs2="+rs2);

好了,本文就介绍到这里。确实,java8的新特性,还是带来了一些编码上的改变,能够让代码更简单。

最近更新:

Java8新特性:接口的默认方法
208\. Spring Boot Swagger2:排序 – 漂游记
207\. Spring Boot Swagger2:极简方式
我读的书很多,但都没有你好看【一禅录】
206\. Spring Boot 2.0 Swagger2:使用
205\. Spring Boot 2.0 Swagger2:初识Swagger
当要离开的时候,我却动情了
205\. jetcache:你需要知道的小技巧
204\. jetcache:在Spring Boot中怎么玩?
遇见阿里,遇见自己
203\. 阿里jetcache
202\. 阿里Pandora Boot
微信公众号赞赏功能升级了,真的假的?
《喜剧之王》「我养你啊」之人生选择
201\. Spring Boot JNDI:Spring Boot中怎么玩JNDI
510阿里日,马老师献上最走心、最科技范儿证婚词~
200\. Spring Boot JNDI:在Tomcat中怎么玩JNDI?
199\. Spring Boot JNDI:这是虾米?
Spring Boot 数据库迁移系列
Spring Boot葵花宝典:初露锋芒:MyBatis insert异常 Parameter 'name' not found
198\. Spring Boot Flyway工作原理

相关文章

  • java8 新特性总结

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

  • 1.Java8你需要了解的

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

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

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

  • 默认方法

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

  • Java 8 新特性 - 函数式接口 Functional In

    Java8的其中一个新特性,函数式接口。 什么是函数式接口?有且仅有一个抽象方法的接口(不包括默认方法、静态方法以...

  • JAVA8新特性之默认方法

    默认方法的由来 我们都知道在java8新特性中对于接口也加入了一个新的改动,那就是默认方法了,那为什么要加入这个新...

  • java 各版本新特性介绍

    java8 新特性 Java8 主要包括的新特性有: 函数式接口如果一个接口只有一个抽象方法,那么该接口就成为一个...

  • Java8新特性:接口的默认方法

    说明 需求缘起: Spring Boot 2.0有很多新的特性,但是这些特性是依赖JDK的版本是jdk 8+才能进...

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

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

  • java8接口中的默认方法

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

网友评论

      本文标题:Java8新特性:接口的默认方法

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