我有一个正在进行的程序,但我似乎无法将如何将某些类添加到容器中。
我正在为一个2D人创建一个java程序。我有一个抽象类,BodyPart(所有正文部分共有),DrawablePart和ContainerPart类实现抽象类,其中Drawable部分包括实现的类,如head,legs,feet等; ContainerParts包含已实现的类,例如person>上身& lowerbody。
我唯一要做的就是创建派生自容器类的upperbody和lowerbody类,它有一个BodyPart数组。
假设我正在使用从ContainerPart派生的LowerBody容器。如何才能有一个可以包含Legs和Feet数组(从DrawablePart派生)的LowerBody构造函数?我想让LowerBody和UpperBody派生自Avatar容器,它来自ContainerPart。
我知道在没有显示我的代码的情况下很难得到答案,但我认为有人可以通过我在我的课程中创建的UML图解释给我。
以下是UML图:
这是一个带有BodyPart数组的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;
}
在我的容器类中,我有一个BodyPart数组的实例字段,如上面的构造函数所示。但是当我尝试使用多个派生的BodyPart时,我得到了这个:
但是,如果我只有一个,在super()中说“yourFoot”,它就会起作用。
答案 0 :(得分:1)
我无法将此作为评论添加到此处。
如果我理解正确,你会有以下内容(your real constructor has more arguments
):
public abstract class BodyPart {
private String name;
private String color;
......
......
}
public class DrawablePart extends BodyPart {
public DrawablePart(){
super();
}
}
public class ContainerPart extends BodyPart {
public ContainerPart(String name, String color, int xCoord, int yCoord, BodyPart[] yourParts){
super(......);
...........
}
}
public class Legs extends DrawablePart {
public Legs(){
super();
}
}
现在您要将LowerBody
创建为:
public class LowerBody extends ContainerPart {
public LowerBody(Legs[] legs, Feet[] feet, String name, String color, int xCoord, int yCoord){
super(name, color,xCoord, yCoord, legs);
........
.......
}
public LowerBody(Legs leg, Feet feet, String name, String color, int xCoord, int yCoord){
super(name, color,xCoord, yCoord, new BodyPart[]{leg, feet});
}
}
如果是,问题是什么?它应该工作正常。如果我遗失任何内容,请告诉我。
答案 1 :(得分:0)
也许是一个愚蠢的问题。为什么不让LowerBody扩展阿凡达?你仍然可以获得ContainerPart的好处。
或者你可以添加一个新的构造函数:
public LowerBody(List<DrawableParts> parts) {
}