Java8 新特性之接口增强
在 Java7 以及以前的版本中,接口里的方法都是抽象的,并且不存在静态方法,属性默认修饰符是 public static final.所有方法的声明都是 public [返回类型] [方法名](参数列表) [throws 异常列表].
而在 Java8 定义的接口中存在 2 种有具体实现的方法,分别如下:
1 static
可以有静态方法:public static [返回类型] [方法名](参数列表) [throws 异常列表]
Java 中可以实现多个接口,如果 2 个接口存在相同方法名和相同参数列表的静态方法(即方法签名相同),那么 [子类. 父类静态方法] 不知道调用哪一个.因此,不允许使用 [子类. 父类静态方法],只能通过父类名来调用静态方法,解决了冲突问题.
public class CImpl implements InterA, InterB
其中,InterA 和 InterB 存在同名静态方法,子类也可以存在方法签名相同的方法,但是不能用 override 修饰,因为静态方法不能被重写.
通过接口名来调用 static 类型的方法.
2 default
方法可以有默认实现:
public default void defaultMethod(){} (default 不能省略,只能修饰接口中的默认方法)
子类重写接口默认方法时,必须去掉 default.
@Override
public void defaultMethod(){
System.out.println("子类 A 中的默认方法,必须去掉 default 修饰符");
}
定义一个类实现该接口,通过该类的实例来调用 default 类型的方法.
优点
1 避免子类代码重复
当多个类实现一个接口的某个方法时,如果方法的具体实现代码相同,那么就会造成代码重复问题.接口增强相当于把公共的代码提取出来,放入接口定义中,实现类不需要重写该方法,解决了实现该接口的子类代码重复的问题.
2 克服单继承的缺陷
接口中可以定义 static 或 default 类型这两种有具体实现的方法,减少了接口和抽象类之间的区别.对于子类而言,抽象类只能单继承,接口可以实现多个.
参考资料
jdk1.8 新特性 - 接口
JDK8 新特性之接口总结
java8 之接口增强
来源: http://www.bubuko.com/infodetail-2475599.html