文档章节

Java8新特性之接口

liululee
 liululee
发布于 2018/07/22 12:31
字数 640
阅读 87
收藏 1

在JDK8以前,我们定义接口类中,方法都是抽象的,并且不能存在静态方法。所有的方法命名规则基本上都是 public [返回类型] [方法名](参数params) throws [异常类型] {}。 JDK8为接口的定义带来了一些新的改变——接口中可以定义默认(default)方法和静态(static)方法。接下来我们来看看这两个新特性吧~~

1.default方法

上代码!(说实话,多BB啥的还不如老老实实两行代码来的简单实际)

public interface Calculate {
    int add(int a, int b);

    double divide(int a, int b);
}

现在我们要实现这个接口的话,JDK1.8以前肯定是这么写的

public class CalculateImpl implements Calculate {
    @Override
    public int add(int a, int b) {
        return a + b;
    }

    @Override
    public double divide(int a, int b) {
        return a/b;
    }
}

然后我们调用计算接口

public static void main(String[] args) {
    Calculate calculate = new CalculateImpl();
    int x = calculate.add(1,2);
    double y = calculate.divide(3, 1);
    System.out.println("add: " + x +", divide: "+ y);
}

好了,这个时候突然来了个新功能,我们要新增一个方法, 实现(两个数的和)*(两个数的商),而现在这个Calculate 接口又有很多实现的方法,JDK1.8之前,我们要在接口定义一个方法,然后每个实现类都要去实现这个方法,代码修改量很大。而有了default方法, 我们可以直接在Calculate接口新增一个方法

  default double hybrid(int a, int b){
        return add(a,b) * divide(a,b);
    }

这样就可以直接在接口实现类中调用default 方法,接口的实现都不需要改变。如果有实现方式不同的,可以重写方法进行相应的实现。 #####总结:

  • (1)default方法可以被子接口继承亦可被其实现类所调用。
  • (2)default方法被继承时,可以被子接口覆写

2.static方法

接口里的静态方法,即有static修饰的方法不会被继承或者实现,但是静态变量会被继承。 在Calculate接口写一个静态方法。

  //生成min-max的随机整数
    static int randomNum(int min, int max){
        return new Random().nextInt(max-min+1)+min;
    }

调用只需要Calculate.randomNum(min, max)就行了。

好了,关于Java8接口的新特性就介绍到这里了。

© 著作权归作者所有

liululee
粉丝 130
博文 80
码字总数 117498
作品 0
杭州
程序员
私信 提问
Java8新特性:函数式接口@FunctionalInterface使用说明

Java8新特性:接口静态方法与默认方法 Java8新特性:函数式接口@FunctionalInterface使用说明 Java8新特性:方法引用 Java8新特性:函数式编程 我们常用的一些接口Callable,Runnable,Comparato...

键走偏锋
2018/08/05
348
0
Java8新特性(一)_interface中的static方法和default方法

为什么要单独写个Java8新特性,一个原因是我目前所在的公司用的是jdk8,并且框架中用了大量的Java8的新特性,如上篇文章写到的stream方法进行过滤map集合。stream方法就是接口Collection中的...

阳光温暖
2018/07/31
0
0
Java8新特性–Interface中的default方法(接口默认方法)

在Java8的新特性中有一个新特性为接口默认方法,该新特性允许我们在接口中添加一个非抽象的方法实现,而这样做的方法只需要使用关键字default修饰该默认实现方法即可。该特性又叫扩展方法。 ...

DanyCoder
2018/05/15
168
0
30分钟入门Java8之默认方法和静态接口方法

30分钟入门Java8之默认方法和静态接口方法 作者:@JohnTsai 本文为作者原创,转载请注明出处:http://www.cnblogs.com/JohnTsai/p/5598036.html 30分钟入门Java8之默认方法和静态接口方法 前...

spinachgit
2018/01/12
78
0
Java8新特性系列(Interface)

在Java8版本以前,Interface接口中所有的方法都是和,那么在Java8中,Interface有什么新特性呢? 静态成员 在Java8以前,我们要定义一些常量,一般会写一个类,类中都是的一些变量,如下: ...

码上论剑
2018/02/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql中int(11)的列大小是多少?

mysql中int(11)的列大小是多少? 以及可以在此列中存储的最大值? #1楼 mysql中int(11)的列大小是多少? (11) int数据类型的此属性与列的大小无关。 它只是整数数据类型的显示宽度。 从11....

技术盛宴
41分钟前
37
0
聊聊artemis消息的推拉模式

序 本文主要研究一下artemis消息的推拉模式 拉模式 receive activemq-artemis-2.11.0/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQMessageConsumer.......

go4it
50分钟前
39
0
vue 全局前置守卫引起死循环的原因与解决方法

我们经常会用到全局前置守卫,如判断用户有没有登陆过,如果登陆过就直接跳到目的页面,如果没有登陆过,就跳转到登陆页。 先看官网对全局前置守卫的介绍 使用 router.beforeEach 注册一个全...

tianyawhl
今天
39
0
如何按索引从std :: vector <>擦除元素?

我有一个std :: vector <int>,我想删除第n个元素。 我怎么做? std::vector<int> vec;vec.push_back(6);vec.push_back(-17);vec.push_back(12);vec.erase(???); #1楼 erase方法将以两......

javail
今天
43
0
使用生成器模拟时间分片

对于cpu密集型任务, 时间分片可以有效减少页面卡顿, 不过对于纯计算型任务还是推荐使用worker在后台做计算 效果图, 计算密集型任务被分到每次只执行16ms, 每次执行完毕留给浏览器时间去响应事...

阿豪boy
今天
65
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部