【问题标题】:Java 8 - Are interfaces not abstract anymore?Java 8 - 接口不再是抽象的了吗?
【发布时间】:2014-03-14 20:56:52
【问题描述】:

到目前为止,Java 中的接口无法实现任何方法。根据定义,它们只是没有主体的方法签名的集合。

但 Java 8 似乎改变了这一点。

这是真的吗?究竟什么是“默认方法”?什么是“功能接口”?有人愿意给我解释一下吗? Google 上的东西很混乱。

【问题讨论】:

标签: java interface abstract java-8


【解决方案1】:

在 Java 8 中,Interfaces 现在可以拥有实际实现的 default 方法。这样做是为了帮助实现 Interface 并对其进行了更改的用户避免出现问题,因此他们不必更新所有类。

您可以通过将 default 关键字添加到您的方法签名来添加此功能。

The Java Tutorials

【讨论】:

  • 我在回答的时候看到你的回答弹出了,所以我将直接添加到教程的Default Interfaces bit的链接。
  • @barry-Johnson 谢谢
  • 谢谢。我读到功能接口是具有一个“抽象方法”的接口。到目前为止,接口的所有方法都是抽象的。但是现在有“默认方法”,它们不是抽象的。如果是这样,那么不是“默认”接口中的 any 方法是否被认为是抽象的?
  • @Prog 正确。非default 方法和非static 方法本质上是抽象的。所以如果你想在接口中实现一个方法,你可以使用default关键字来升级/增强方法,static关键字来帮助方法。这些不需要由您的实现类实现。
【解决方案2】:

究竟什么是“默认方法”?

默认方法提供了一种机制,让您可以将实现添加到接口而不使其成为抽象类。

默认方法的主要用例是在不破坏其他人代码的情况下向接口添加方法。但是,它们还允许您通过实现接口来“混合”功能,这是对过去只允许单行实现的 Java 类型系统的一个非常强大的补充。

什么是“功能界面”?

另一方面,函数式接口是一种告诉编译器你的接口将只有一个方法的方法。作为交换,编译器为定义接口的实现提供了更短的语法,大大缩短了过去依赖匿名类的代码。

除了上述两个功能之外,接口还允许您定义要在所有实现之间共享的静态函数。与默认实现一样,这为继承实现添加了“第二维”,因为它允许您通过接口实现共享代码。

【讨论】:

    猜你喜欢
    • 2011-05-22
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 2023-03-21
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    相关资源
    最近更新 更多