将多个继承的对象添加到容器类中

时间:2012-10-09 02:11:11

标签: java inheritance abstract-class containers implementation

我有一个正在进行的程序,但我似乎无法将如何将某些类添加到容器中。

我正在为一个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图

enter image description here

这是一个带有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时,我得到了这个:

enter image description here

但是,如果我只有一个,在super()中说“yourFoot”,它就会起作用。

2 个答案:

答案 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) {

}