0

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

我正在为一个 2D 人创建一个 java 程序。我有一个抽象类,BodyPart(所有身体部位共有),DrawablePart 和 ContainerPart 类实现了抽象类,其中 Drawable 部分包括实现的类,如头、腿、脚等;ContainerParts 包括实现的类,例如人 > 上身和下身。

我剩下要做的唯一部分是创建从容器类派生的上半身和下半身类,它有一个 BodyParts 数组。

假设我正在开发从 ContainerPart 派生的 LowerBody 容器。怎么可能有一个可以包含 Legs 和 Feet 数组(从 DrawablePart 派生)的 LowerBody 构造函数?我想让 LowerBody 和 UpperBody 从派生自 ContainerPart 的 Avatar 容器派生。

我知道如果不显示我的代码很难得到答案,但我认为有人可以用我在下面从我的课程中创建的这个 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”,它会起作用。

4

2 回答 2

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});
    }
}

如果是,问题是什么?它应该可以正常工作。如果我遗漏了什么,请告诉我。

于 2012-10-09T02:28:13.413 回答
0

也许是一个愚蠢的问题。为什么不让 LowerBody 扩展 Avatar?您仍然可以获得 ContainerPart 的好处。

或者您可以添加一个新的构造函数:

public LowerBody(List<DrawableParts> parts) {

}
于 2012-10-09T02:20:42.140 回答