java接口增加新方法_Java8新特性:接口的默认方法

716397e660eb1e7f601012fce2d2d9f2.png

【视频&交流平台】

àSpringBoot视频:http://t.cn/R3QepWG

àSpring Cloud视频:http://t.cn/R3QeRZc

àSpringBoot Shiro视频:http://t.cn/R3QDMbh

àSpringBoot交流平台:http://t.cn/R3QDhU0

àSpringBoot 2.0 SpringData和JPA视频:

http://t.cn/R1pSojf

说明

(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的新特性,还是带来了一些编码上的改变,能够让代码更简单。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值