jdk1.8接口新增功能
1.概述
java诞生了20年,一直秉承着接口的组成是抽象方法加全局变量。但是到了jdk1.8,接口有了新的定义。在接口中可以新定义两种方法,分别是stati和default方法。也就是说接口中可以有方法体了。(以下纯属猜测)之所以有这样的改进应该也是在发展过程中遇到了一些问题。一种场景中是这样的:定义了一个接口A,他有1万个实现类,当完成了所有的实现类以后,发现少了一个方法,这个时候一定很崩溃,那么现在增强的接口有了可以定义方法体了,用default修饰,其所有实现类都可以继承这个方法,也可以复写之。下面用例子说明吧。
2.新增default方法
接口中定义default方法:
IFruit接口:
/**
* 接口中定义default方法
*/
interface IFruit{
public void printFruitName();
default void cleanFruit(){
System.out.println("清洗水果");
}
default void eatFruit(){
System.out.println("吃水果");
}
}
这个接口定义了一个抽象方法,两个default方法,其实现类可以做三件事:
1. 直接集成。
2. 复写
3. 引用父类的default方法
Apple实现类:
class Apple implements IFruit{
@Override
public void printFruitName() {
System.out.println("苹果");
}
@Override
public void eatFruit(){
IFruit.super.eatFruit();
System.out.println("吃苹果");
}
}
Apple实现类对eatFruit()方法进行了复写,并且还调用了父类的此方法,注意这里调动父类的方法时,不能像普通子类那些super.方法名(),而需要在super前面加上接口名:InterfaceNmae.super.方法名()如程序代码所示。
3.新增static方法。
interface IFruit{
public static void introduce(){
System.out.println("this is a interfac example");
}
}
如代码所示,我们可以在接口中定义静态方法了!但是,别忘了,静态方法是不能被继承了哦!
4.总结
- jdk1.8接口增强就是增加default定义方法的可能,但是这种方法依靠实例化对象调用
- 接口中可以定义static方法,并且可以由接口直接调用。