GoF书中的第13页有一个声明:
Two objects of the same type need only share parts of their interfaces.
我不确定我理解这句话。
编辑:完整的引用可能确实有助于理解
类型是用于表示特定接口的名称。我们说的是 如果对象具有“窗口”类型,则它接受所有请求 在名为“Window”的接口中定义的操作。对象可能有 许多类型,和广泛不同的对象可以共享一种类型。部分的 对象的界面可以用一种类型和其他部分来表征 通过其他类型。 两个相同类型的对象只需要共享部分 他们的接口。接口可以包含其他接口作为子集。
答案 0 :(得分:8)
在他们的语言中,对象 interface 是对象的整个公共契约(不要认为语言实现在这里)。
对象定义的所有签名集称为接口 对象。
类型更像是您所认为的声明的接口....
类型是用于表示特定接口的名称。
想象:
public class Foo : IBar, IBaz {}
public class Fuz : IBar, IBuz {}
Foo和Fuz都是IBar“类型”,但它们只共享各自接口的那个方面。
答案 1 :(得分:1)
更完整的引用是:
很明显,我认为,这是在谈论多重继承。例如,您可能类型是用于表示特定接口的名称。我们说的是 如果对象具有“窗口”类型,则它接受所有请求 在名为“Window”的接口中定义的操作。一个对象可能 有很多类型,而且广泛不同的对象可以共享一种类型。部分 对象的界面可以用一种类型和另一种来表征 其他类型的零件。两个相同类型的对象只需要共享 他们的接口的一部分。接口可以包含其他接口 子集。
TextWindow
和MenuWindow
都将Window
与其他类一起子类化。在他们使用的意义上,两个对象都可以被认为具有“类型”Window
,并且它们都将实现与该类型相关联的操作 - 它们都将具有Window
的方法。但是TextWindow
也可能是TextEditor
的子类,而MenuWindow
没有,所以他们的方法总集(他们所谓的“接口”)是不一样的,即使Window
部分重叠。
答案 2 :(得分:-1)
我不知道这意味着什么,因为我没有这本书。但是接口是类的方法签名,与公共变量相结合。作为特定类型的子类型,也是其父类的一种类型,它可以具有父类不具有的方法,因此它只共享父类的一些接口。我不知道这实际上是不是在谈论它。