本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看活动链接
何时使用:Java 8+接口默认方法与抽象方法
Java 8允许在称为Default Methods的接口中实现方法的默认实现。
我什么时候应该使用那种interface default method而不是abstract class(with abstract method(s))感到困惑。
那么,什么时候应该使用默认方法接口,什么时候应该使用抽象类(带有抽象方法)?在这种情况下,抽象类仍然有用吗?
高分回答:
除了默认方法实现(例如私有状态)之外,抽象类还有很多,但是从Java 8开始,无论选择哪种方法,都应该default在接口中使用Defender(aka。)方法。
对默认方法的限制是,只能在对其他接口方法的调用方面实现默认方法,而无需参考特定实现的状态。因此,主要用例是更高级别的便捷方法。
这项新功能的好处在于,在您不得不为便利方法使用抽象类,从而将实现者限制为单一继承之前,现在您可以拥有仅接口和最少实现量的真正干净的设计程序员的努力。
default向Java 8中引入方法的最初动机是希望在不破坏任何现有实现的情况下,使用面向lambda的方法来扩展Collections Framework接口。尽管这与公共图书馆的作者更为相关,但是您可能会发现相同的功能在您的项目中也很有用。您可以在一个集中的地方添加新的便利,而不必依赖其他类型层次结构的外观。
高分回答:
有一些技术差异。与Java 8接口相比,抽象类仍然可以做更多的事情:
抽象类可以有一个构造函数。
抽象类更加结构化,可以保持一个状态。
复制代码
从概念上讲,防御者方法的主要目的是在Java 8中引入新功能(如lambda函数)后向后兼容。
文章翻译自kgs4h5t57thfb6iyuz6dqtun5y-ac4c6men2g7xr2a-stackoverflow-com.translate.goog/questions/1…
作者建议: 顶层肯定是抽象接口,比如说ThreadPoolExecutor它继承了抽象的执行器AbstractExecutorService,这个执行器实现了ExecutorService接口
ThreadPoolExecutor因为已经继承了AbstractExecutorService,就不能在继承了
因此设计者在ThreadPoolExecutor类里设计了静态内部类的work,它继承了AQS,内部类-拒绝策略等。
真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话
求点赞? 求关注❤️ 求分享? 对8块腹肌的我来说真的 非常有用!!!
如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️