Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的多重继承(在Java中表示Liger)_Java_Oop - Fatal编程技术网

Java中的多重继承(在Java中表示Liger)

Java中的多重继承(在Java中表示Liger),java,oop,Java,Oop,在JAVA中使用接口可以实现多重继承,那么我们可以用JAVA来表示LIGER对象吗? 让我举个小例子: 狮虎是雄狮和虎妞的杂交后代。 继承自TIGER的财产 1.虎纹条纹图案(属性-条纹) 继承自LION的财产 1.狮子般的黄褐色背景(属性-背景色) 2.尾巴更像狮子的尾巴(属性-尾巴) 老虎遗传的行为 1.游泳(方法-swim()) 狮子遗传的行为 2.非常善于交际,类似于狮子。(方法-社会化()) 这在Java中如何表示?我将使用聚合,而不是继承。狮虎结合了老虎和狮子的行为,但既不是一个也不

在JAVA中使用接口可以实现多重继承,那么我们可以用JAVA来表示LIGER对象吗? 让我举个小例子: 狮虎是雄狮和虎妞的杂交后代。 继承自TIGER的财产 1.虎纹条纹图案(属性-条纹)

继承自LION的财产 1.狮子般的黄褐色背景(属性-背景色) 2.尾巴更像狮子的尾巴(属性-尾巴)

老虎遗传的行为 1.游泳(方法-swim())

狮子遗传的行为 2.非常善于交际,类似于狮子。(方法-社会化())


这在Java中如何表示?

我将使用聚合,而不是继承。狮虎结合了老虎和狮子的行为,但既不是一个也不是另一个。因此,这里的聚合似乎更好

class Liger {

private Tiger tiger = new Tiger();
private Lion lion = new Lion();

void swim() { tiger.swim(); }

void socialize() { lion.socialize() ; }

Tail getTail() { return lion.getTail(); }

Skin getSkin() { return tiger.getSkin(); }

}

在大多数情况下,当你想到“多重继承”时,这里的继承可能应该被合成所取代。@MichaelDautermann:干得好,Michael!!!我认为利格尔是多重继承的恰当例子。为了回答你的问题,是的,接口是实现这一点的方法。定义一个Tiger接口和一个Lion接口,Liger类实现Tiger,Lion{…}。请注意,这确实有其局限性,因此您可能无法接受Alex的建议。完全同意。99%的多重遗传案例可以通过组合解决。另一方面,狮虎本身并不真正包含两种动物。。。如果每一种动物在创造时都在某个地方注册,那么可能会有问题。。看起来只有当Animal类是无状态的时,这才是好的。