Java 8中接口和抽象类的本质区别

4

考虑到接口现在可以为其提供的方法提供实现,我无法很好地解释接口和抽象类之间的区别。有人知道如何恰当地解释这个区别吗?

我也听说接口在性能方面比抽象类要轻量级一些。有人能确认这一点吗?

2个回答

17

接口仍然不能有任何状态。接口仍然不能有任何final方法,这意味着任何实现都可以覆盖其所有默认方法。而且,接口仍然不能有任何构造函数。

即使多个接口具有相同签名的默认方法,仍然可以实现多个接口。您无法扩展多个类(无论是抽象的还是非抽象的)。


谢谢!第一个原因让我非常清楚地了解了两者之间的区别。 - Joran Bergfeld
1
只有接口可以被扩展为函数式接口,抽象类不能在 Lambda 中使用。 - aepurniet

1
  1. 一个类只能继承自另一个类,但可以实现多个接口。
  2. 接口不能有任何字段,除了定义常量,而抽象类可以。
  3. 抽象类可以定义构造函数,而接口不行。

默认方法仅限于输入参数和方法调用。它们本质上是无状态的。抽象类可能具有状态。因此,从设计的角度来看,我建议在需要代码重用时使用抽象类。将代码重用减少到包范围内是一个很好的设计原则。

接口非常适合模拟和传达包、库、域或应用程序的概念。它们不依赖于实现细节,并允许随意替换实现。它们支持测试和模块化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接