界面疑惑

时间:2011-12-18 20:11:59

标签: interface

接口是对象(不同对象)和动作(尝试执行相同操作的不同对象类型)之间的层吗?和接口检查它是什么类型的对象以及它如何执行特定的操作?

3 个答案:

答案 0 :(得分:2)

我会说将接口视为承诺更好。在Java中,有一个接口构造允许继承API,但不指定行为。通常,接口由对象提供的与对象交互的方法组成。

在duck-typed语言中,如果一个对象呈现特定于特定类的特定方法集(接口),那么该对象就像指定类一样。

接口的执行很复杂,因为您需要为行为指定一组标准。一个有趣的例子是埃菲尔的合同设计。

答案 1 :(得分:0)

您是否在询问术语"界面"如在特定语言(如Java或Objective-C)中使用,还是术语的一般含义?

如果是后者,那么"界面"可以是几乎任何东西。将油倒在水上 - 它们之间的界线是一个界面"。界面是两个独立事物相遇并相互作用的任何一点。

该术语在计算中没有严格的定义,但指的是两个相对不同的域相互作用的任何地方。

答案 2 :(得分:0)

要理解.net或Java中的接口,必须首先认识到继承结合了两个概念:

  1. 派生类型的实现将包括基类型的所有字段(包括私有字段),并且可以访问基类型的任何和所有公共或受保护成员,就像它自己的一样。
  2. 可以自由使用派生类型的对象来代替基类型的对象。

允许对象使用多个基本类型的成员是很复杂的。有些语言提供了这样做的方法,但是通常会混淆哪个基础对象的哪个部分被引用,特别是如果一个语言继承自两个独立地从第三个继承的类。因此,许多框架只允许对象从一个基础对象继承。

另一方面,允许对象替换多于一种其他类型的对象不会产生这些困难。例如,表示数据库表的对象可以允许自己被传递到例程,该例程想要“可以枚举内容的事物,其类型为T(在.net中为IEnumerable< T>”),或者是想要的例程。一个“可以添加T类型的东西的东西”(ICollection< T> in .net),或者想要一个“想要知道什么时候不再需要的东西(在.net中可以使用ID)”的东西。请注意,有些事情需要通知,当它们不再需要时不代表可枚举的集合,并且还有其他东西代表可以在不通知的情况下放弃的可枚举集合。因此,两种类型的对象都不能从另一种继承,但是如果使用一个接口来表示“可以枚举其内容的东西,它们是T型”,或者“想要知道它们何时不再需要的东西”,那么让类实现两个接口都没问题。