推断在接口中使用默认方法使其像 Java 中的抽象 class 是否正确?

Is it correct to infer that use of Default method in interface has made it like an abstract class in Java?

既然我们现在在接口中有了默认方法,它是不是更像是一个既有抽象方法又有非抽象方法的抽象 class?实际使用的时候,interface和abstract class可以互换使用吗?是否存在两者之间的差异仍然相关的场景?

您仍然不能扩展 2 个抽象 类,但可以实现多个接口。

是的,在某些情况下两者之间的差异仍然相关。

  • 接口不能有字段(静态字段除外)。
  • 接口不能有构造函数。
  • 接口不能有 final 方法。
  • 接口不能有非public方法。

第一点是真正阻止您使用像 class 这样的界面的原因。所有其他的都可以解决(尽管它可能很难看)。

有点。关键区别在于抽象 类 是 类,因此具有可以封装状态并具有对该状态进行操作的具体方法的优势。接口不能有状态,因此默认方法只能根据其他接口方法进行操作。

我对immibis 的回答投了赞成票。但我个人认为,几乎没有什么东西可以让我们决定使用哪一个,Abstract class 或 interface。 Abstract class 具有一些接口所没有的特定功能。例如,接口不允许您在其中描述任何方法,而 abstract class 允许。此功能有所不同。

如果您想要...

,请仔细阅读此 post 以获得详细信息

http://javacodingtutorial.blogspot.de/2013/10/interface-vs-abstract-class.html