由于Java 8允许在称为“ 默认方法”的接口中实现方法的默认实现,因此,我何时使用a似乎有些混乱abstract class。
abstract class
那么什么时候应该使用默认方法接口,什么时候应该使用抽象类呢?在这种情况下,抽象类仍然有用吗?
除了默认方法实现(例如私有状态)外,抽象类还有很多,但是从Java 8开始,无论选择哪种方法,都应该使用防御者(aka。)。 default在接口中)方法。
default
对默认方法的约束是,只能在对其他接口方法的调用方面实现默认方法,而无需参考特定实现的状态。因此,主要用例是更高级别的便捷方法。
这项新功能的好处在于,在你不得不为便利方法使用抽象类,从而将实现者限制为单一继承之前,现在你可以拥有仅接口和最少实现量的真正干净的设计程序员的努力。
default向Java 8中引入方法的最初动机是希望在不破坏任何现有实现的情况下,使用面向lambda的方法来扩展Collections Framework接口。尽管这与公共图书馆的作者更为相关,但是你可能会发现相同的功能在你的项目中也很有用。你可以在一个集中的地方添加新的便利,而不必依赖其他类型层次结构的外观。