多继承
Ian Joyner
cber 译
Eiffel和C++都提供了多继承的机制。但Java却没有,因为它认为多继承会导致许多问题的
出现。不过Java提供了接口(interface)作为一种替换机制,它类似于Objective C中的协议
(protocol)。Sun宣称接口可以提供多继承所能提供的所有特性。
Sun所宣称的“多继承会带来许多的问题”这个观点是对的,尤其是在C++中用以实现多继
承的方法更能说明这一点。那些看起来似乎使用多继承会比单继承更简单的理由,现在都
已被证明是毫无意义。例如,如何制订对于从两个类之上继承得到的具有相同名字的数据
项之间的策略?它们之间是否兼容?如果是的话,那他们是否应该被合并成为一个实体?
如果不兼容,那应该如何区分它们???这样的列表可以列出很长很长。
Java的接口机制也可以用以实现多继承,但它也有一个很重要的不同之处(与C++相
比):继承中的接口必须是抽象的。由于使用接口并没有任何的实作,这就消除了需要从
不同实作之间选择的可能。Java允许在接口中声明具有常数字段。当需要多继承时,他们
就合并成为一个实体,这样也就不会导致歧义的产生。但是,当这些常数具有不同的值
时,又有什么会发生呢?
由于Java不支持多继承,我们就不可以像在C++和Eiffel中那样使用混合(mixin )了。混合
是一种特性,它可以把从不同的类中得到的不同的非抽象的函数放到一起形成一个新的复
杂的类。例如,我们可能希望从不同的源代码中导入一些utility函数。然而,