一个接口是什么以及它的作用是什么?

3

关于面向对象编程,你如何描述接口?

我的意思是,子类化可以描述为“有一个”,继承可以描述为“是一个”。成员方法可以描述为“能做什么”。

是否有任何方式可以扩展(无意冒犯)以描述接口的功能?

接口可以被描述为一种规范或者契约,它定义了一个类应该具有哪些方法和属性,但并不实现这些方法和属性。通过实现接口,类可以遵循这个规范并提供自己的实现方式。


组合可以描述为“拥有”,而不是子类化... - Federico A. Ramponi
5个回答

7
我将对象视为名词,方法视为动词,接口视为形容词(当然,这种类比是过于简化的,但通常足够好用)。
例如:一个接口Serializable的作用类似于形容词,它为实现该接口的对象应用一些特征,但并不改变该对象本身。我们可以说,“这是一个可序列化的对象”。但我们不会说,“这个对象是一个可序列化的”,也不会说,“这个对象有一个可序列化的”。
我还喜欢Federico的answer,即接口是“CAN-DO”。
接口是类支持的一组相关操作。接口中的方法描述了类能做什么。
就像一个名词可以带多个形容词一样,一个类可以实现多个接口,只要它们不冲突。一个类实现的所有接口的并集是该类所能做的全部内容。
实际上,接口是一组方法签名,没有实现这些方法的代码。只有方法名称和参数。根据语言不同,方法签名可能还包括返回类型和抛出的异常。
接口由方法组成,但不包括数据成员。
顺便说一句,我不会说子类化是HAS-A。我的理解是子类化与继承相同,因此它们都是IS-A。而HAS-A被称为聚合或组合。
组合是一个对象拥有另一个对象的情况。销毁外部对象也会销毁内部对象。例如:大学组成部门。关闭大学,部门消失。
聚合是一个对象包含另一个对象,但不拥有它。销毁外部对象不会销毁内部对象。例如:大学雇用教授,但关闭大学不会杀死教授。

2

接口是一个拥有所有纯虚成员的抽象基类。

因此,从你的Has-A/Is-A角度来看,它应该类似于任何你将应用于抽象基类的东西。

接口通常存在于不完全支持多重继承的语言中,以更安全地提供一些相同的好处。


1

Acts-As-A.


1
根据您对方法的描述,我也会将接口描述为“能做什么”。接口就像是一个“合同”,它规定了“所有实现我的类都可以做这些事情”。

0

因此,“所有纯虚成员”部分。 - Joel Coehoorn

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