0

私は順調に進んでいるプログラムを持っていますが、特定のクラスをコンテナーに追加する方法について先を行くことができないようです。

私は2Dの人だけのためのJavaプログラムを作成しています。抽象クラスBodyPart(すべてのボディパーツが共通に共有)があり、DrawablePartクラスとContainerPartクラスは抽象クラスを実装します。Drawableパーツには、頭、脚、足などの実装クラスが含まれます。また、ContainerPartsには、person> upperbody&lowerbodyなどの実装されたクラスが含まれています。

私がしなければならない唯一の部分は、BodyPartsの配列を持つcontainerクラスから派生したupperbodyクラスとlowerbodyクラスを作成することです。

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 に答える