oop - 接口(interface)的功能主要是为了使用函数而不知道类是如何构建的吗?

标签 oop interface

据我了解它们是契约(Contract)的接口(interface),我将其解释为契约(Contract)词,即必须具有接口(interface)中指定的内容(例如打开、关闭、读取、写入接口(interface)处理文件)。

但是我很难理解的是为什么你需要一个接口(interface)来告诉你这个类必须能够做什么,你不知道你已经在接口(interface)规范中写了它吗?

我可以看到接口(interface)的唯一原因是在大型项目中,您希望能够在不真正知道如何构建的情况下使用类。通过查看界面需要什么,您可以知道如何使用它。

这让我想知道为什么我应该在我将是唯一一个工作的项目中使用(或者如果我应该)接口(interface)。我很确定它还有更多我没有看到的用途。

我的大部分假设和解释来自 this questionthis vbforums post

最佳答案

你说得对,接口(interface)指定了契约(Contract),但实现可能有很大不同。

简单示例:Java 中的列表。列表是一个接口(interface)。两种常见的实现是 ArrayList 和 LinkedList。每个人的行为不同,但遵守相同的契约(Contract)。我的意思是 ArrayList 具有 O(1) (常量)访问权限,而 LinkedList 具有 O(n) 访问权限。

如果你还不明白 O(1) 和 O(n) 是什么意思,我建议你看看 Plain english explanation of Big O .

您甚至在自己的代码(即不是或不会成为公共(public) API 的代码)上执行此操作的原因是:

  • 促进单元测试:你可以模拟一个界面,而你不能(或不容易)模拟一个类;和
  • 允许您稍后更改实现而不影响调用代码。
  • 关于oop - 接口(interface)的功能主要是为了使用函数而不知道类是如何构建的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1052004/

    相关文章:

    java - 对扩展现有枚举类型的泛型感到困惑

    java - 默认接口(interface)实现

    objective-c - cocoa 中的单例,他们是邪恶的吗?

    c# - 关于类定义中语法的问题

    Python3/Classes/OOP/如何使用方法更改对象自身的值?

    java - 为什么 List 是一个接口(interface)而不是一个类

    java - 巨大的远程接口(interface) -> 最佳实践?

    objective-c - 你认为什么叫做 "helper method"?

    Javascript OOP 和咖啡

    具有两个属性或两个属性的 Typescript 接口(interface)