【问题标题】:What is the difference between abstract classes and interfaces in Java 8 and beyond? [duplicate]Java 8 及更高版本中的抽象类和接口有什么区别? [复制]
【发布时间】:2018-11-23 05:01:15
【问题描述】:

接口中增加了默认方法,抽象类和接口有什么区别?

【问题讨论】:

  • 嗨,欢迎来到 Stack Overflow!请参阅how to ask。在此处发布任何问题之前,请先对您的问题进行一些研究,我敢肯定,如果您在谷歌上搜索这个问题,您会发现许多教程可以比我们在这里回答的内容更好地解释您的事情。希望你能理解。快乐编码:)
  • 我不明白你为什么提到 Java 9。我不记得 Java 9/10/11 对此有任何重大变化,除了拥有私有方法。

标签: java


【解决方案1】:

Java 8 中抽象类和接口之间的主要区别在于,抽象类是类,接口是接口。

一个类可以有一个可以被非抽象方法修改的状态,但是一个接口不能有这个状态,因为它们不能有实例变量。

第二个区别是即使在 Java 8 中接口也不能有构造函数,但您可能还记得抽象类在 Java 中总是有构造函数。

实际上,引入了默认或防御方法以保持向后兼容性,同时使 Collection API 更适合在 Java 8 的关键特性(如 lambda 表达式)中使用。

如果不添加默认方法,就不可能在 Java 中的现有接口上声明任何新方法而不破坏所有实现它的类,但由于默认方法,您现在可以更好地发展您的 API。

它们保护您的代码不实现新方法,因此它们也称为防御方法。

【讨论】:

    【解决方案2】:
    • Java 9 接口仍然不能包含构造函数。
    • Java 9 接口仍然不能有非静态成员。

    这些是很大的区别,而不是多重继承 IMO。

    【讨论】:

      猜你喜欢
      • 2019-03-02
      • 2012-04-28
      • 2010-11-13
      • 2013-02-17
      • 1970-01-01
      • 2019-12-14
      • 2010-12-27
      相关资源
      最近更新 更多