Fundamental difference between interface and abstract class in Java 8
本问题已经有最佳答案,请猛点这里访问。
考虑到接口现在可以为它提供的方法提供一个实现,我不能合理地解释接口和抽象类之间的区别。有人知道如何正确解释这种差异吗?
我还被告知,与抽象类相比,接口在性能方面更轻。有人能证实吗?
接口仍然不能有任何状态。接口仍然不能有任何最终方法,这意味着任何实现都可以覆盖其所有默认方法。接口仍然不能有任何构造函数。
您仍然可以实现多个接口,即使它们有具有相同签名的默认方法。不能扩展多个类(抽象类或非抽象类)。
默认方法仅限于输入参数和方法调用。它们本质上是无状态的。抽象类可能具有状态。因此,从设计的角度来看,我建议在需要代码重用时使用抽象类。在我看来,将代码重用减少到包范围是一个很好的设计原则。
接口非常适合对包、库、域或应用程序的概念进行建模和通信。它们不依赖实现细节,允许随意替换实现。它们支持测试和模块化。