继承自Java中可能有多种类型的超类

时间:2013-04-04 18:37:13

标签: java inheritance multiple-inheritance

我正在用libGDX库编写一个游戏,我有一个情况,我有两个边界框,用于碰撞检测,一个用于可旋转对象,另一个用于不可旋转的对象。可旋转继承自不可旋转。

我想制作一个游戏实体类,它具有渲染调试形状和动画等常用功能,并存储与游戏中所有实体相关的其他游戏信息。我只想在课堂上写作,然后扩展它以产生所有的游戏元素,但我想不出一种方法,因为其中一些可以旋转,而另一些则不会。现在我曾想过将边界框作为全局对象,但我再也想不出构建一个可以有两种类型的全局变量的方法,具体取决于我如何实例化对象。

有人可以帮忙吗?或者我正在采取错误的做事方式?

2 个答案:

答案 0 :(得分:1)

您可以使用合成而不是继承。所以,例如:

class Box {}
class RotatableBox extends Box {}
class GameElement {
  Box box; // could be RotatableBox
}

然后,您可以从框中委派所需的任何方法,以便可以直接从游戏元素访问它们。

答案 1 :(得分:0)

嗯...

由于你曾指责我在你的评论中提供虚假信息(并声称你理解多态性),这里有一个简单的例子,证明即使声明了对象,你肯定也可以调用子类的方法。作为父类。

class ParentClass
{
    public void sayHey()
    {
        System.out.println("I am a parent");
    }
}

class ChildClass extends ParentClass
{
    public void sayHey()
    {
        System.out.println("I am a child");
    }
}

public void testIt()
{
    ParentClass p = new ChildClass();
    p.sayHey();  // prints "I am a child"
}

相同的概念适用于实现接口的类。

在游戏中,您可以使用界面或超类来表示可旋转或不可旋转的游戏实体。

您可以使用GameEntityFactory根据您的需要生成任何类型的对象。