oop - 我为什么要使用接口(interface)?

标签 oop interface

我知道它们强制你实现方法等,但我无法理解的是你为什么要使用它们。任何人都可以给我一个很好的例子或解释为什么我想实现这个。

最佳答案

一个具体示例:接口(interface)是指定其他人的代码必须满足的契约的好方法。

如果我正在编写代码库,我可能会编写对具有特定行为集的对象有效的代码。最好的解决方案是在接口(interface)中指定这些行为(没有实现,只是描述),然后在我的库代码中使用对实现该接口(interface)的对象的引用。

然后任何随机的人都可以来创建一个实现该接口(interface)的类,实例化该类的一个对象并将其传递给我的库代码并期望它能够工作。 注意:当然可以严格实现一个接口(interface)而忽略接口(interface)的意图,因此仅仅实现一个接口(interface)并不能保证一切都能正常工作。笨蛋总能找到办法! :-)

另一个具体示例:两个团队致力于必须合作的不同组件。如果两个团队在第一天就坐下来就一组接口(interface)达成一致,那么他们就可以分道扬镳,围绕这些接口(interface)实现他们的组件。 A 团队可以构建测试工具来模拟 B 团队的组件进行测试,反之亦然。并行开发,错误更少。

关键点是接口(interface)提供了一个抽象层,以便您可以编写不了解不必要细节的代码。

大多数教科书中使用的

典型示例是排序例程。只要您有办法比较任意两个对象,您就可以对任何类别的对象进行排序。因此,您可以通过实现 IComparable 接口(interface)来使任何类可排序,这会强制您实现用于比较两个实例的方法。所有排序例程都是为了处理对 IComparable 对象的引用而编写的,因此一旦实现了 IComparable,您就可以在类的对象集合上使用任何这些排序例程。

关于oop - 我为什么要使用接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/240152/

相关文章:

javascript - 如果 "O"已经放了国际象棋人,那么如何更改 X 放国际象棋人并在 OOP javascript 中检查数组 2D 的获胜者?

C++ 函数指针和类

python - 如何创建 "list"类的子类,它在实例化时自行排序?

c# - 将System.Type强制转换为特定的类

c# - 面向对象的 n 层设计。我是不是抽象得太多了?还是不够?

c++ - 我可以像这样混合使用 pimpl 和 C 接口(interface)吗?

Java通用接口(interface)性能

java - 如何为一个 Java 类创建两个接口(interface),一个是只读的,一个是可读写的?

oop - 您如何命名接口(interface)的 "reference"实现?

Java外部类访问内部类接口(interface)常量