首页 新闻 搜索 专区 学院

为什么Java在后来的版本中,给接口增加了默认方法、静态方法、私有方法?

0
悬赏园豆:5 [待解决问题]

在业务发展过程中,发现某个功能是所有子类都需要的,那么我们该怎么办?给接口增加抽象方法吗?如果直接在接口增加抽象方法,那么所有已经写好的具体实现类就会报编译错误。因为具体类必须实现接口的全部抽象方法。这样就给代码的扩展带来很大的麻烦。如果可以只在接口增加需要的方法,而所有的实现子类就可以直接拿来使用就方便许多了。这就是运行接口添加默认方法的原因。

public interface CRMSystem {
	Client add(Client newGuy);
	Event add(Event e, Client guy);
	Event[] todayEvents();

	// 默认方法,用来升级接口
	public default void myMethodDefault() {
	...
	}
}

那么为什么要在接口增加静态方法和私有方法呢?

public static 返回值类型 方法名(参数列表) {方法体} // 静态方法,不可以是protected,默认是public
private 返回值类型 方法名(参数列表) {方法体} // 私有的普通方法
private static 返回值类型 方法名(参数列表) {方法体} // 私有的静态方法


liaowenxiong的主页 liaowenxiong | 初学一级 | 园豆:30
提问于:2021-11-19 15:05
< >
分享
所有回答(1)
0

接口中的默认方法和静态方法是jdk8的新特性,私有方法是jdk9的新特性。
你对默认方法的理解很对,添加默认方法主要是为了支持接口的演进,使接口进行优化和演进变的平滑。在我看来,站在jdk8的角度上这一新特性最好的实践就是使得java支持了Lambda表达式。

静态方法和默认方法类似,简单说来两者都能够完成声明接口中方法的同时提供实现。但只要你了解静态方法你就会知道静态方法不会被继承。这就是二者最大的不同。而这一点不同正是二者应用范围得以区分开的重要原因。
接口中静态方法的出现还基于设计层次的考量提高接口的内聚性。

简单总结一下这哥俩吧。
接口中的静态方法一般都是给接口自己用的,而默认方法则是为了接口后续的迭代设计,确保之前继承了接口的程序不会随着接口的升级而挂掉。

而私有方法的出现主要是为了提高接口中的代码复用性。如果你的接口中有多个默认方法,而这些默认方法又有很多相同部分,那么你可以使用私有方法来将这部分抽离出来,提高代码复用性。

张雷锋 | 园豆:202 (菜鸟二级) | 2021-12-30 16:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册