【发布时间】:2012-10-09 02:11:11
【问题描述】:
我有一个正在顺利进行的程序,但我似乎无法提前了解如何将某些类添加到容器中。
我正在为一个 2D 人创建一个 java 程序。我有一个抽象类,BodyPart(所有身体部位共有),DrawablePart 和 ContainerPart 类实现了抽象类,其中 Drawable 部分包括实现的类,如头、腿、脚等; ContainerParts 包括实现的类,例如 person > upperbody & lowerbody。
我剩下要做的唯一部分是创建从容器类派生的上半身和下半身类,它有一个 BodyParts 数组。
假设我正在开发从 ContainerPart 派生的 LowerBody 容器。怎么可能有一个可以包含 Legs 和 Feet 数组(从 DrawablePart 派生)的 LowerBody 构造函数?我想让 LowerBody 和 UpperBody 派生自 Avatar 容器,该容器派生自 ContainerPart。
我知道如果不显示我的代码很难得到答案,但我认为有人可以使用我在下面从我的课程中创建的这个 UML 图向我解释它。
这是 UML 图:
这是一个包含 BodyParts 数组的 ContainerPart 构造函数(super 来自 BodyPart),这是我想要的,但我需要 LowerBody 的构造函数中的某些部分,例如 Leg 和 Feet:
public ContainerPart(String name, String color, int xCoord, int yCoord, BodyPart[] yourParts) {
super(name, color, xCoord, yCoord);
parts = yourParts;
}
在我的容器类中,我有一个 BodyParts 数组的实例字段,如上面的构造函数所示。但是当我尝试使用多个派生的 BodyPart 时,我得到了这个:
但是,如果我只有一个,在 super() 中说“yourFoot”,它会起作用。
【问题讨论】:
-
我认为 Drawable 部分应该是一个接口,而不是一个类。
-
这会更有意义,但我现在需要专注于容器部分。
-
它仍然会有所帮助。当你想到它时,一切都应该是一个容器,而且大多数都应该是可绘制的。
-
我很想把这两个问题分开。也就是说,分别对人和表示进行建模。您可能还希望考虑“优先组合优于继承”的规则。例如,您可以拥有一个知道如何绘制人的渲染器,而不是强制人为 Drawable
-
容器不是可绘制的,在我知道如何将某些身体部位对象添加到 LowerBody 和 UpperBody 之前,我不倾向于在绘图部分工作。
标签: java inheritance abstract-class containers implementation