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 新增全部特性的介绍。
如需了解,请跳转链接查看:我是跳转链接
JDK8接口增强,至此介绍完毕
如果本文对你有所帮助,那就给我点个赞呗 ^_^
End