Java 8和更高版本中的抽象类和接口之间有什么区别?

时间:2018-11-23 05:01:15

标签: java

在接口中添加默认方法后,抽象类和接口有什么区别?

2 个答案:

答案 0 :(得分:1)

  • Java 9接口仍然不能包含构造函数。
  • Java 9接口仍然不能具有非静态成员。

这些差异很大,不是IMO的多重继承。

答案 1 :(得分:0)

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

类可以具有可以通过非抽象方法修改的状态,但是接口不能具有该状态,因为它们不能具有实例变量。

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

实际上,引入了默认方法或防御者方法来保持向后兼容性,同时使Collection API更适合在lambda表达式之类的Java 8重要功能中使用。

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

它们为防止执行新方法而保护您的代码,因此它们也称为防御者方法。