我知道Java不支持多重继承.但是,如果我必须设计一个类系统,比如动物王国.如何表示两种不同动物的杂交动物?例如,骡子(驴或马?),狮子(狮子或老虎).如何继承Lion和Tiger类来制作Liger课程?有没有办法在不将Tiger和Lion作为接口的情况下做到这一点?如果他们不能成为接口怎么办?
在这种情况下,继承不是正确的工具.你看,liger 不是老虎,也不是狮子.它有两个特点,但它是两者都不是.
假设你去动物园,笼子里写着"老虎".你偷看,看到这个奇怪的巨型猫,你当然不认为是一只老虎.这很酷,但不是老虎.你也不认为它是狮子.它也不可替代.
因此,它应该组成 a Lion和a Tiger并将其行为委托给正确的行为,或者完全或部分地"覆盖"他们的行为.
更新:
现在,如果你真的想要某种多重继承,该怎么办,比如你想Liger从a Hybrid和a中派生出一个Feline?看看Scala的特征是否有可能.要在Java中实现它,您需要一个接口和一个类,用于设计中您希望乘法"继承"的每个概念.看看这里的想法.
如果您希望单个对象可以同时识别,它们将始终需要是接口.
您通常可以将行为委托给复合类,但是对于liger(它几乎是我最喜欢的子类),您需要确定哪个动物的行为具有优先权.liger可能是其中一个或另一个的直接后裔,或者两者都不是.
Java只允许多个"API继承"(接口),而不是实现.