我更喜欢使用“合约”这个术语来代替接口,因为它定义了任何实现者必须遵守的“合约”。
引用自http://java.sun.com/docs/books/tutorial/java/concepts/interface.html的内容:
实现接口允许一个类更加明确其承诺提供的行为。接口形成了类与外部世界之间的契约,而这个契约在编译时由编译器执行。如果你的类声明实现一个接口,那么该接口定义的所有方法必须出现在它的源代码中,否则该类将无法成功编译。
接口是实现者承诺要做的事情。就像他支持的功能列表。
如前所述,合约是一个好词,但它也让您拥有相同事物的不同实现(例如jdbc驱动程序..)。另一个好处是使用接口可以增加代码的可测试性,但这可能更难解释..
接口是合同的一部分。它指定了实现类必须提供哪些成员,但它并没有指定这些成员必须做什么。
这就是为什么接口定义总是需要一个额外的文档(或注释)来解释每个成员必须“做什么”的原因。
例如,如果接口包括一个方法 Add,带有两个整数参数和一个整数结果,您需要提供信息,即结果必须是两个参数的总和。(这只是一个简单的例子,但在这一点上误解可能会非常麻烦)。
跟随彼得的链接和信息,找到一些例子。 例子是一个重要的教学工具。 (例如,你应该用一些例子来打败手册作者)
另外: 有一些非常简单但描述性很强的例子,比如 IComparable、ISerializable等。
正如其他人所说,接口是一种契约。实现接口的类承诺提供指定的方法。但在我的学习中,我真的想知道为什么这很重要,为什么不只使用继承呢?
我没有太多面向对象编程的经验,但我写下了自己的想法。我相信其他更有经验的面向对象编程人员可以对此进行补充(或者如果我犯了错误,可以纠正我)。
在不支持多重继承的语言中,通过实现相同的接口,否则无关的类可以共享功能。
我发现从关系的角度来看,继承和接口的区别更容易理解。从基类继承的类与该类具有“is-a”关系,而实现接口的类与该接口具有“implements”关系。
借用Programming C# 4th Edition的一个例子,汽车是一种交通工具,房子是一座建筑物,但两个类都可能实现CanBeBoughtWithABigLoan功能。