Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 所需接口和所提供接口之间有什么区别_Java_Oop_Interface_Uml_Modeling - Fatal编程技术网

Java 所需接口和所提供接口之间有什么区别

Java 所需接口和所提供接口之间有什么区别,java,oop,interface,uml,modeling,Java,Oop,Interface,Uml,Modeling,我大体上知道: 接口是引用类型,它类似于类, 只能包含常量、方法签名、默认方法、静态方法和嵌套类型。方法体仅存在于默认方法和静态方法中。接口不能实例化它们只能由类实现或由其他接口扩展 但所需接口和所提供接口之间有什么区别?所需接口和所提供接口似乎是与UML相关的术语,其中所提供接口描述一个类提供的功能,所需接口描述另一个类需要的功能: 在Java中,所有接口都是相同的;提供/要求之间没有区别 前面的链接不再起作用,但可以提供帮助所提供和所需的接口始终指接口的概念,表示观点 我希望下面的图表能对这

我大体上知道:

接口是引用类型,它类似于类, 只能包含常量、方法签名、默认方法、静态方法和嵌套类型。方法体仅存在于默认方法和静态方法中。接口不能实例化它们只能由类实现或由其他接口扩展


但所需接口和所提供接口之间有什么区别?

所需接口和所提供接口似乎是与UML相关的术语,其中所提供接口描述一个类提供的功能,所需接口描述另一个类需要的功能:

在Java中,所有接口都是相同的;提供/要求之间没有区别


前面的链接不再起作用,但可以提供帮助

所提供和所需的接口始终指接口的概念,表示观点

我希望下面的图表能对这个问题有所启发


在实现级别上,a提供的接口是由类实现的接口(在最常见的意义上,例如,类B实现接口I)必需接口是组件对接口的任何使用(例如,如果类a定义了一个以接口I为参数的方法,这意味着类a具有必需的接口I)

我认为您混淆了一般意义上的接口和特定于语言的构造(也称为接口)

一般来说,接口是指两个部分/对象/系统之间的相互作用点。在非常低的级别上,您可以说对象的所有公共成员(方法+字段)组成了它的intreface

在更高的抽象级别上,程序员通常认为API是库/系统的接口。但这并不意味着这个API只包含一个Java接口。API包含所有对象、方法、构造函数、配置文件。。。这是库用户要使用的配置。这可能是您所需和提供的接口所需要的配置

如果您编写java库,通常需要java标准库的API(java包中的所有内容)-这将是必需的接口。(它可以由任何实现的JVM提供,例如Android使用与Java相同的接口,但不是Java)在另一端,您的库也会公开一些接口(人们可以使用您的库的方式),这些接口称为提供的接口。(同样,如果我说接口,我不是指一个java接口,它可能是几个接口+实现+一些值类的混合体)


您可能会遇到的另一个术语是SPI,它类似于API,但SPI的用户不调用此接口,而是实现它并将其公开给原始系统。它是描述插件接口的一种方式。

一个接口可以被视为两个代理或组件之间的契约。这个概念可以应用于类的内容、通过网络端点交互的容器中的程序以及许多其他系统。为了执行符合契约的事务,一个代理需要来自另一个代理的服务或结果,而另一个代理或组件根据请求输入向代理或组件提供结果。该接口基于bot代理之间的协议。合同的基础定义了有限数量的信息对象,这些信息对象将从请求代理传输到与服务提供代理或组件的规范相匹配的服务器。提供代理通过基于请求代理提供的对象的过程生成结果对象或结果。通过发送对象、消息或传输数据,或者可能完成更改状态的操作,将结果传输给请求代理。 请求的零件或组件操纵所需的接口。服务提供代理或组件操纵提供的接口以传输结果消息。 请注意,结果可能是确定性的(我们希望在大多数设计用户案例中都是这样),但服务也可能有随机响应,这可能是因为存在不受控制的噪声干扰导致产生结果的对象或动作的过程,或者是因为过程本质上是随机的,如量子力学系统。

类、方法或函数始终可以被视为接口的元素,该接口具有与提供程序接口、函数或给出响应的方法相匹配的所需端(调用、传输调用参数)。但该概念可用于描述任何类型的信号系统与符合接口合同模型的组件之间的接口的交互。

您在哪里读到“需要和提供的接口”?@Duncan:是的,它们可以,在Java 8中。默认方法在Java8中也是新事物。@JBNizet啊,我听说过默认方法,但没有注意到静态方法已经出现了!我懂了。。。因此,required中的重点是显示如果接口未imemented,则类无法正常工作。对它来说,这是生死攸关的问题。对于提供它的类来说,它可以在没有它的情况下“生存”,但提供它只是为了“善待”另一个类。如果这是正确的,你能在你的解释中说得更清楚些吗?也许可以用一个更清楚的例子:一个饥饿的家伙,如果没有食物给他,他会死;一个暂时不需要的家伙,但无论如何都会做额外的工作来帮助第一个家伙。一张照片值千言万语+1提供信息,并解释“提供”和“要求”在实施层面的含义。谢谢