JDK8新特性(二):JDK8接口增强

1.接口增强

在JDK8之前,JDK规定接口中只能定义 ①静态常量  ②抽象方法

修饰词 interface 接口名{
    静态常量;
    抽象方法;
}

在JDK8之后,对接口进行了增强。我们可以在接口中定义 ①静态常量   ②抽象方法   ③默认方法    ④静态方法

修饰词 interface 接口名{
    静态常量;
    抽象方法;
    默认方法;
    静态方法;
}

2.为什么要对接口增强

 1.为什么要引入默认方法?

        实例1:我们在接口 A 中定义了个 test1() 抽象方法,现在有类 B、类 C 都实现了接口 A 。但是现在因为要接入新的需求,而这一个抽象方法明显不能够满足新需求。那么则需要在接口 A 中重新顶一个 test2() 抽象方法,此时我们发现类 B 、类 C 都因为没有实现新的抽象方法 test2() 而报错了。。。。。

        实例2:JDK8 在 Map 接口中增加了 forEach 方法。按 JDK8 之前标准,定义 forEach() 方法如下所示:

public interface Map<K,V>{
    ...
    abstract void forEach(BiConsumer<? super K, ? super V> action);
}

我们通过 API 可以查询到 Map 接口的实现类如下所示:

       此时,如果在 Map 接口中增加一个 forEach() 抽象方法,那么所有的这些实现类都需要来实现 forEach()方法,从而保证语法正确不报错,显然这工程量是巨大的,而且代码也会有很大的冗余。

       因此,在 JDK8 时为接口新增了默认方法(default修饰),效果如下:

public interface Map<K,V>{
    ...
    default void forEach(BiConsumer<? super K, ? super V> action){
        ...
    }
}

特性:

    1.新增的默认方法实现类不必重写,可以直接使用;

    2.实现类也可以根据需要重写       ---->这样就方便了接口的扩展。​​​​​​

 2.接口静态方法

     为了方便接口的扩展,JDK8 同时为接口新增了静态方法

特性:

    1.接口中的静态方法,实现类既不能调用,也不能重写;(只属于接口本身)

    2.只能通过接口名. (接口名+ .)的方式调用

3.默认方法、静态方法的定义

//默认方法的定义(使用 default 定义)
修饰符 interface 接口名{
    修饰符 default 返回值类型 方法名(){
        代码部分;
    }
}

//静态方法的定义(使用 static 修饰)
修饰符 interface 接口名{
    修饰符 static 返回值类型 方法名(){
        代码部分;
    }
}

4.默认方法 和 静态方法 的区别

1.默认方法通过实例调用,静态方法通过接口名调用

2.默认方法可以被继承,实现类可以直接使用接口默认方法,也可以重写接口默认方法

3.静态方法不能被继承,实现类不能重写接口静态方法,只能使用接口名调用。

5.Demo(这很简单,Demo就省了)

    谢谢


附:JDK8新特性(目录)

       本目录为 JDK8新特性 学习目录,包含JDK8 新增全部特性的介绍。

       如需了解,请跳转链接查看:我是跳转链接


博主写作不易,来个关注呗

求关注、求点赞,加个关注不迷路 ヾ(◍°∇°◍)ノ゙

博主不能保证写的所有知识点都正确,但是能保证纯手敲,错误也请指出,望轻喷 Thanks♪(・ω・)ノ

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扛麻袋的少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值