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 同时为接口新增了静态方法

扫描二维码关注公众号,回复: 8971176 查看本文章

特性:

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

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

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

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

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

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

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

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

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

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

    谢谢


附:JDK8新特性(目录)

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

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


JDK8接口增强,至此介绍完毕

如果本文对你有所帮助,那就给我点个赞呗 ^_^ 

End

发布了247 篇原创文章 · 获赞 44 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/lzb348110175/article/details/103824666