Ale*_*eks 18
提供和所需的接口总是参考接口的概念,指出了观点.
我希望以下图表能够阐明这个问题.

在提升级别上,提供的接口是由类实现的接口(在最常见的意义上,例如,类B实现接口I).必需的接口是组件对接口的任何使用(例如,如果类A定义了具有接口I作为参数的方法,则这意味着类A具有所需的接口I).
必需的和提供的接口似乎是与 UML 相关的术语,其中提供的接口描述了一个类提供的功能,而必需的接口描述了另一个类所需的功能:进一步阅读。
在Java中,所有接口都是相同的;提供/必需之间没有区别。
以前的链接不再有效,但https://www.ibm.com/developerworks/rational/library/dec04/bell/index.html可以提供帮助
我认为你混淆了一般意义上的界面和语言特定的结构,也称为界面。
一般意义上的接口意味着两个部分/对象/系统之间的交互点。在非常低的层次上,您可以说一个对象的所有公共成员(方法 + 字段)组成了它的接口。
在更高的抽象级别,程序员通常将 API 视为库/系统的接口。但这并不意味着这个 API 只包含一个 Java 接口。API 包含所有对象、方法、构造函数、配置文件......这些都是由库的用户使用的。这可能是你需要和提供的接口。
如果您编写 java libary,您通常需要 Java 标准库的 API(java 包中的所有内容)——这将是所需的接口。(它可以由任何实现的 JVM 提供,例如 Android 使用与 Java 相同的接口,但它不是 Java)另一方面,您的库也会公开一些接口 - 人们可以使用您的库的方式 - 那将是调用提供的接口。(同样,如果我说接口,我不是指一个 Java 接口,它可能是几个接口 + 实现 + 一些值类的混合体)
您可能会遇到的另一个术语是 SPI服务提供者接口,它类似于 API,但 SPI 的用户不会调用此接口,而是实现它并将其公开回原始系统。这是一种描述插件接口的方式。