Java 8 允许在称为Default Methods的接口中默认实现方法。
我对何时使用那种interface default method,而不是abstract class(with abstract method(s)) 感到困惑。
interface default method
abstract class
abstract method(s)
那么什么时候应该使用带有默认方法的接口,什么时候应该使用抽象类(带有抽象方法)?抽象类在那种情况下仍然有用吗?
抽象类比默认方法实现(例如私有状态)要多得多,但是从 Java 8 开始,只要您可以选择其中任何一种,就应该default在接口中使用 defer(又名)方法。
default
默认方法的限制是它只能在调用其他接口方法的情况下实现,而不参考特定实现的状态。所以主要的用例是更高层次和方便的方法。
这个新特性的好处是,在你被迫使用抽象类来提供便利方法,从而将实现者限制为单一继承之前,现在你可以拥有一个非常干净的设计,只需要接口和最少的实现强加给程序员的努力。
将方法引入 Java 8 的最初动机default是希望在不破坏任何现有实现的情况下使用面向 lambda 的方法扩展 Collections Framework 接口。尽管这与公共图书馆的作者更相关,但您可能会发现相同的功能在您的项目中也很有用。你有一个集中的地方来添加新的便利,你不必依赖类型层次结构的其余部分的外观。