描述接口的作用是什么?

3
如何向懂基本面向对象设计的学生班级描述接口的作用?
10个回答

4

我更喜欢使用“合约”这个术语来代替接口,因为它定义了任何实现者必须遵守的“合约”。


3
作为一个初学者,以前我对"contract"这个术语从来没有真正理解过。我思考了很长时间,仍然无法理解它。这丝毫没有帮助我理解接口...一点也没有。
所以,当我教别人时,我会用"特征"这个词代替"contract"这个词。
因此,接口描述了类型的特征。而特定类型可以具有多组特征。但是,那些特征必须由开发人员明确定义(实现),当他决定一个类型必须具有这些特征时。
然后,为了进一步说明,我使用动物作为示例接口定义,而不是典型的实际软件解决方案。这样,学生更容易想象接口的需求。有时,我也会使用建筑/房屋作为示例。
有时候,根据听众的不同,我还会使用Lowe's或Home Depot的插头和插座作为例子。例如:桌子上放了几个插头。它们都具有不同的特征。但有两个观察点:
1.插头没有实现。它们没有连接到封装的电源或“代码库”,定义了接口在运行时将提供什么。 2.我只使用一种类型的插座,只能适用于样品中的其中一种插头。其他的“特征”不允许插座使用接口,因为插座没有“实现”接口特征。
希望这能帮到你。

1

引用自http://java.sun.com/docs/books/tutorial/java/concepts/interface.html的内容:

实现接口允许一个类更加明确其承诺提供的行为。接口形成了类与外部世界之间的契约,而这个契约在编译时由编译器执行。如果你的类声明实现一个接口,那么该接口定义的所有方法必须出现在它的源代码中,否则该类将无法成功编译。


0
当一个类X继承自另一个类Y时,会有两个效果:
  1. 类X会接收类Y大部分或全部功能的默认实现,因此只需为与类Y不同的内容定义自身。
  2. 类X的对象可以在几乎任何可以使用类Y的对象的地方使用。
继承非常强大,但有一个根本性的限制:除了 Object 之外的每个类必须从准确地一个其他类派生。如果继承是使一个类型的对象能够替代另一种类型的唯一方式,那么这意味着一种类型只能替代两个或更多个超类型的唯一方式是,如果其中一个超类型可以被另一个超类型替代。不幸的是,许多情况下类型关系并不形成一个很好的层次结构。例如,在一个图形程序中,人们可能希望能够将 FilledRectangle 和 FilledEllipse 都视为可替换 FilledShape,并将 FilledEllipse 和 OutlineEllipse 都视为可替换 EllipseShape,但这将要求 FilledEllipse 可以同时替代 FilledShape 和 EllipseShape,尽管它们彼此之间不能互相替代。
接口通过提供一种方式来解决这个限制,即一个类型可以声明自己能够替代许多其他类型(接口),而无需继承它们。在上述图形示例中,可以有一个名为 IFilledShape 的接口,其成员包括 FillColor,还可以有一个名为 IEllipseShape 的接口,其成员包括 SetCenter、GetMajorAxis 等等。如果一个程序需要一个类型为 IFilledShape 的参数,可以传入 FilledRectangle、FilledEllipse、FilledTriangle 或任何实现 IFilledShape 的其他类型。FilledEllipse 实现 IFilledShape 接口并不妨碍它同时实现 IEllipseShape、IDrawableShape 或任何其他接口。

0
首先,我想说我们有一个团队和编程经理会强制你实现一些特定的功能,例如在Java或C#中。他们设计接口,而你通过实现该接口来保证你的类具有相同的功能。之后,我会与他们讨论接口可能带来的一些优势。

0

接口是实现者承诺要做的事情。就像他支持的功能列表。


0

如前所述,合约是一个好词,但它也让您拥有相同事物的不同实现(例如jdbc驱动程序..)。另一个好处是使用接口可以增加代码的可测试性,但这可能更难解释..


0

接口是合同的一部分。它指定了实现类必须提供哪些成员,但它并没有指定这些成员必须做什么。

这就是为什么接口定义总是需要一个额外的文档(或注释)来解释每个成员必须“做什么”的原因。

例如,如果接口包括一个方法 Add,带有两个整数参数和一个整数结果,您需要提供信息,即结果必须是两个参数的总和。(这只是一个简单的例子,但在这一点上误解可能会非常麻烦)。


0

跟随彼得的链接和信息,找到一些例子。 例子是一个重要的教学工具。 (例如,你应该用一些例子来打败手册作者)

另外: 有一些非常简单但描述性很强的例子,比如 IComparable、ISerializable等。


0

正如其他人所说,接口是一种契约。实现接口的类承诺提供指定的方法。但在我的学习中,我真的想知道为什么这很重要,为什么不只使用继承呢?

我没有太多面向对象编程的经验,但我写下了自己的想法。我相信其他更有经验的面向对象编程人员可以对此进行补充(或者如果我犯了错误,可以纠正我)。

在不支持多重继承的语言中,通过实现相同的接口,否则无关的类可以共享功能。

我发现从关系的角度来看,继承和接口的区别更容易理解。从基类继承的类与该类具有“is-a”关系,而实现接口的类与该接口具有“implements”关系。

借用Programming C# 4th Edition的一个例子,汽车是一种交通工具,房子是一座建筑物,但两个类都可能实现CanBeBoughtWithABigLoan功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接