小编典典

何时使用:Java 8+ 接口默认方法,与抽象方法

all

Java 8 允许在称为Default Methods的接口中默认实现方法。

我对何时使用那种interface default method,而不是abstract class(with abstract method(s)) 感到困惑。

那么什么时候应该使用带有默认方法的接口,什么时候应该使用抽象类(带有抽象方法)?抽象类在那种情况下仍然有用吗?


阅读 126

收藏
2022-03-06

共1个答案

小编典典

抽象类比默认方法实现(例如私有状态)要多得多,但是从 Java 8 开始,只要您可以选择其中任何一种,就应该default在接口中使用
defer(又名)方法。

默认方法的限制是它只能在调用其他接口方法的情况下实现,而不参考特定实现的状态。所以主要的用例是更高层次和方便的方法。

这个新特性的好处是,在你被迫使用抽象类来提供便利方法,从而将实现者限制为单一继承之前,现在你可以拥有一个非常干净的设计,只需要接口和最少的实现强加给程序员的努力。

将方法引入 Java 8 的最初动机default是希望在不破坏任何现有实现的情况下使用面向 lambda 的方法扩展 Collections
Framework
接口。尽管这与公共图书馆的作者更相关,但您可能会发现相同的功能在您的项目中也很有用。你有一个集中的地方来添加新的便利,你不必依赖类型层次结构的其余部分的外观。

2022-03-06