必需接口和提供接口之间的区别是什么
我知道一般:
接口是一种引用类型,它类似于类,只能包含常量、方法签名、默认方法、静态方法和嵌套类型。方法体仅存在于默认方法和静态方法中。接口不能实例化 — 它们只能由类实现或由其他接口扩展?
但是,必需接口和提供的接口之间有什么区别?
我知道一般:
接口是一种引用类型,它类似于类,只能包含常量、方法签名、默认方法、静态方法和嵌套类型。方法体仅存在于默认方法和静态方法中。接口不能实例化 — 它们只能由类实现或由其他接口扩展?
但是,必需接口和提供的接口之间有什么区别?
提供和要求的接口始终是指接口的概念,表示观点。
我希望下面的图表能为这个主题提供一些启示。
在实现级别上,提供的接口是由类实现的接口(在最通常的意义上,例如,类B实现接口I)。必需的接口将是组件对接口的任何使用(例如,如果类 A 定义了一个将接口 I 作为参数的方法,这意味着类 A 具有必需的接口 I)。
我认为你混淆了一般意义上的界面和语言特定的结构,也称为界面。
一般意义上,界面是指两个部分/对象/系统之间的反应点。在非常低的级别,你可以说一个对象的所有公共成员(方法+字段)组成了它的内涵。
在更高的抽象级别,程序员通常将API视为库/系统的接口。但这并不意味着这个API只包含一个Java接口。API 包含所有对象、方法、配置文件...供库用户使用。这可能是您需要和提供的接口所要做的。
如果你编写java库,你通常需要Java标准库的API(Java包中的所有内容) - 这将是所需的接口。(它可以由任何实现的JVM提供,例如Android使用与Java相同的接口,但它不是java)另一方面,你的库也会公开一些接口 - 人们可以使用你的库的方式 - 这将被称为提供的接口。(再说一遍,如果我说接口我不是指一个java接口,它可能是几个接口+实现+一些值类的混合)
您可能遇到的另一个术语是SPI服务提供商接口,它类似于API,但SPI的用户不会调用此接口,而是实现它并将其暴露给原始系统。这是描述插件接口的一种方式。