August 2021
Intermediate to advanced
450 pages
4h 46m
Chinese
在定义接口之前,请注意C++没有叫作接口的结构体。当使用C++时,你可以使用抽象类的语法子集创建一个接口。例如,以下的C++代码是一个抽象类。然而由于该类中的唯一一个方法是一个虚方法,所以没有任何实现。结果该抽象类提供了与接口相同的功能。
接口术语
这又一次造成了软件术语的混淆,而且非常混淆。请注意你可以在不同场景下使用术语接口,所以请确保在正确的上下文中使用它。
第一,当涉及用户交互的可视化接口(比如和显示器)时,会广泛使用图形化用户接口(GUI)。
第二,类的接口基本上是指其方法签名。
第三,在Objective-C和Swift语言中,接口和实现会将代码在物理上分割为不同的模块。
第四,接口和协议本质上是父类和子类之间的契约。
你还能想出其他关于接口的概念吗?
这有个明显的问题,如果抽象类能够提供与接口一样的功能,那么为什么Java和.NET还要提供名为接口的结构呢?而且为什么Objective-C和Swift提供协议?
一方面,C++支持多重继承,而Java、Objective-C和.NET却不支持。尽管Java、Objective-C和.NET类只能继承自一个父类,但它们可以实现多个接口。使用多个抽象类构成了多重继承。所以Java和.NET并不支持多重继承。总之,当使用接口时,你无须考虑正式的继承体系,如果设计上是合理的,理论上你可以为任何类添加接口。而抽象类要求你继承自该抽象类,并且延伸至其自身所有可能的父类。
圆
基于这些考虑,接口往往作为缺少多重继承情况下的一种替代方案。不过从技术角度来说并不是这样。接口是独立的设计技术,虽然使用多重继承也可以完成对应用程序的设计,但接口并不是替代或回避使用多重继承。 ...
Read now
Unlock full access