Java 1.8 接口支持添加方法的默认实现
Java 8 允许我们通过 default
关键字对接口中定义的抽象方法提供一个默认的实现。
请看下面示例代码:
// 定义一个公式接口
interface Formula {
// 计算
double calculate(int a);
// 求平方根
default double sqrt(int a) {
return Math.sqrt(a);
}
}
在上面这个接口中,我们除了定义了一个抽象方法 calculate
,还定义了一个带有默认实现的方法 sqrt
。
我们在实现这个接口时,可以只需要实现 calculate
方法,默认方法 sqrt
可以直接调用即可,也就是说我们可以不必强制实现 sqrt
方法。
补充:通过
default
关键字这个新特性,可以非常方便地对之前的接口做拓展,而此接口的实现类不必做任何改动。
Formula formula = new Formula() {
@Override
public double calculate(int a) {
return sqrt(a * 100);
}
};
formula.calculate(100); // 100.0
formula.sqrt(16); // 4.0
上面通过匿名对象实现了 Formula
接口。但是即使是这样,我们为了完成一个 sqrt(a * 100)
简单计算,就写了 6 行代码,很是冗余。