2012-10-09 24 views
0

我有一個計劃,正在順利進行中,但我似乎無法總結我的未來圍繞如何某些類添加到容器中。添加多個繼承的對象爲容器類

我創建只是一個2D人物的Java程序。我有一個抽象類BodyPart(所有身體部分共有),DrawablePart和ContainerPart類實現抽象類,其中可繪製部分包括實現的類,如頭部,腿部,腳部等; ContainerParts包含實施的類,如人>上身&下半身。

我已經離開做的唯一部分是創建upperbody並從容器類,其具有BodyParts將陣列派生lowerbody類。

比方說,我的工作LowerBody容器,從ContainerPart的。怎樣纔能有一個LowerBody構造函數可以包含腿和腳的數組(從DrawablePart派生)?我希望LowerBody和UpperBody派生自Container容器,它來自ContainerPart。

我知道這很難得到答案不顯示我的代碼,但我覺得有人可以把它與我從我的課下創建這個UML圖解釋給我聽。

下面是UML圖

enter image description here

這裏是一個ContainerPart構造與BodyParts將(超是BodyPart的),這是我想要的數組,但我需要某些部分,如腿和在LowerBody的構造腳:

public ContainerPart(String name, String color, int xCoord, int yCoord, BodyPart[] yourParts) { 
     super(name, color, xCoord, yCoord); 
     parts = yourParts; 
} 

以我的容器類我有一個實例字段爲BodyParts將陣列,如在上述的構造看出。但是,當我嘗試使用一個以上的衍生BodyPart的,我得到這個:

enter image description here

但是,如果我只有一個,在超(說「yourFoot」),它會工作。

+0

我在想可繪製的部分應該是一個接口,而不是一個類。 –

+0

這會更有意義,但現在我需要專注於容器部分。 –

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

如果有,是什麼問題?它應該工作正常。如果我缺少任何東西,請告訴我。

0

也許一個愚蠢的問題。爲什麼不只是讓LowerBody擴展頭像?您仍然可以獲得ContainerPart的好處。

也可以添加一個新的構造:

public LowerBody(List<DrawableParts> parts) { 

} 
+0

所以頭像應該包含LowerBody和UpperBody,這在邏輯上是正確的。 –