Java 8中接口和抽象类之间的根本区别

时间:2014-04-04 06:55:35

标签: java interface abstract-class java-8 default-method

考虑到接口现在可以为它提供的方法提供实现,我无法正确理解接口和抽象类之间的区别。有谁知道如何正确解释差异?

我还被告知,与抽象类相比,接口稍微轻一些,性能明智。有人可以证实这一点吗?

2 个答案:

答案 0 :(得分:16)

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

您仍然可以实现多个接口,即使它们具有相同签名的默认方法也是如此。你不能扩展多个类(抽象或不抽象)。

答案 1 :(得分:1)

  1. 一个类可以只从一个其他类继承,但可以实现许多接口
  2. 接口可能没有任何字段,期望定义常量,而抽象类可以
  3. 抽象类可以定义构造函数,而接口不能
  4. 默认方法仅限于输入参数和方法调用。他们本质上是无国籍的。抽象类可能具有状态。因此,从设计的角度来看,我建议在需要代码重用时使用抽象类。在我看来,减少代码重用到封装范围是一个很好的设计原则。

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