2012-05-15 44 views
0

可能重复:
extending from two classes替代扩展多个类

我正在试图让我的世界为一个简单的调制和我基本上都需要这样的代码:

(我不想编辑很多类,因为我希望我的mod可以和其他很多mod兼容。)

public class EntityModPlayer extends EntityPlayer, EntityCreature 
{ 
    super(par1World); 
    fishHook = new EntityFishHook(this /* has to be EntityPlayer */); 
    tasks.addTask(0, new EntityAISwimming(this /* has to be EntityCreature */)); 
} 

但是你不能扩展多个类...

新EntityFishHook *想要一个EntityPlayer而不是EntityModPlayer作为PARAM但新EntityAISwimming方法要我用一个实例EntityCreature作为参数。所以我需要“扩展”EntityPlayer EntityCreature,不能只复制EntityPlayer并将其粘贴为EntityModPlayer。

我已经玩过接口,但我认为这是不同的,所以我不能像“扩展”一样使用它。

对不起@大家谁不知道我的世界还是无法理解我的英语...(我是德国人。)

任何想法,我没有改变多/重要类像EntityTasks(因为如果他们正在编辑同一个类,这会使我的mod与其他mods不兼容)?

*新的EntityFishHook(EntityPlayer)方法在Minecraft中并不存在。我只是以此为例来更好地解释它。我希望你明白我想解释的是什么,我敢肯定这不是一件容易的事情:/

+0

只需制作EntityPlayer和EntityCreature类型的实例变量,并将它们传递给构造函数。 – eboix

回答

3

Java(和其他单一继承语言)的正确用法是有两个接口。 EntityPlayerEntityCreature然后将它们组合成单个类,即Implements的每个接口。

另一种方法是使用Composite Pattern创建具有全部来自各Class方法单一类和有类代表每个方法给每个通过结合接口的单一类拥有的内部类的实例。如果客户端代码不期望在语言级别的接口或者像Python这样的鸭子打字语言,那么这是有效的。

您可以结合两者同Composite Pattern接近两个接口,并有Composite对象委托给每个Interface的个别实现,这将使容易依赖注入;使用Google Guice之类的代码使您的代码更加灵活。

+0

谢谢!作品! :) – user1363904

3

你可以尝试让你的一个超类扩展另一个类。然后你可以从两个类中获得方法!