第11章 接口
与C++及其他语言不同,Object Pascal不支持多重继承,这意味着每个类只能有一个单一的基类。
多重继承的实用性是面向对象编程专家争论的议题之一。Object Pascal中缺少多重继承可以被看做一种劣势,因为您没有C++的功能强大;但也可以被认为是优势,因为这让语言更简单并避免多重继承引入的问题。在Object Pascal中对没有多重继承的一种替代方法是使用接口,接口允许您定义一个类,并同时实现多个抽象。
注解 :今天的大多数面向对象编程语言不支持多重继承(包括Java和C#),而是使用接口。在一个类上声明支持多个接口,这样兼具灵活和强大,同时也避免了多重继承带来的问题。真正支持多重继承的主要是C++语言。一些动态面向对象语言支持混入(mix-ins),这是一种不同且更简单的方法,实现了类似于多重继承的效果。
与其展开争论,不如简单承认从多个 "角度 "来看待一个对象是有用的。不过,在举例说明这个原理之前,我们必须先介绍一下接口在对象 Pascal 中的作用,并弄清它们是如何工作的。从更普遍的角度来看,接口支持的面向对象编程模型与类略有不同。实现接口的对象对其支持的每个接口都具有多态性,因为你可以调用对象实现的任何接口方法。与类相比,接口更倾向于封装,类与类之间的联系也比继承松散(因为不会继承任何实现)。
注解:本章介绍的技术以及对接口的全面支持最初是为了支持和实现Windows COM(Component Object Model)架构而添加到Object Pascal语言中的。随后,这个特性被扩展为可以在COM之外的场景使用,但一些COM元素,比如通过ID进行接口标识和引用计数支持,仍然存在于当前Object Pascal接口实现中,使其与其他大多数语言略有不同。