第7章会讲述有关继承的更多细节。然而,这里很适合讨论多重继承。多重继承是类设计中最强大也最具挑战的一个方面。
顾名思义,多重继承允许一个类继承自多个类。实际看起来这是个好主意。对象都应该模拟现实世界,不是吗?现实世界中存在很多多重继承的例子。父母是多重继承的一个好例子。每个孩子有一对父母,这是非常自然的事。所以设计类时使用多种继承是有道理的。在一些面向对象的语言中(比如c++中)你可以这样做。
然而,这种情况会陷入与操作符重载相似的情况。多重继承是非常强大的技术,事实上没有它一些问题会变得难以解决。多重继承甚至可以完美解决一些问题。然而,多重继承无论对程序员还是编译器作者而言,都会显著增加系统的复杂度。
与操作符重载一样,java、.net和objective-c的设计者认为多重继承带来的系统的复杂度超过了带来的好处,因此从语言层面消除了多重继承。java、.net和objective-c语言提供的接口构造能在某些方面能弥补这一点。但java、.net和objective-c不允许传统的多重继承。
行为继承和实现继承
接口是行为继承的一种机制,抽象类则用于实现继承。编程语言中的接口类型提供不同行为的接口,但不提供实现,而抽象类既提供接口,也能提供实现。第8章详细阐述了该主题。