0

我正在尝试学习如何将继承用于类项目,制作游戏。他们有很愚蠢的名字,对不起。我有一个抽象类 Cabbages,以及它的一个子类 GoodCabbages。在子类中,我基本上是在制作一个椭圆形。

Cabbages 类中有一个抽象的 draw() 方法。我在 GoodCabbages 子类中实现了它,如下所示:

public void draw(){
    int x = (int) (Math.random() * (GARDEN_WIDTH - CABBAGE_RADIUS));
    int y = (int) (Math.random() * (GARDEN_HEIGHT - CABBAGE_RADIUS));
    Oval o = new Oval(x, y, CABBAGE_RADIUS, CABBAGE_RADIUS, Color.WHITE, true);
    window.add(o);
}

我需要将这些椭圆添加到另一个类中的 ArrayList 以供以后使用,但我不知道如何执行此操作。

N_GOOD_CABBAGES = 10 //in a separate interface

for(int j = 0; j < N_GOOD_CABBAGES; j++){
    Cabbage good = new Cabbage().draw();
    cabbages.add(j, Cabbage.draw());
}

希望这是足够的信息。谢谢您的帮助。

4

2 回答 2

0

您需要 A)创建一个返回椭圆的 ArrayList 的方法,或 B)在您的类中创建一个公共变量。

一个)

public List<Oval> getOvals() {
    List<Oval> lis = new ArrayList<Oval>();
    //for loop code here
    return lis;
}

二)

public class MyClass {
    public List<Oval> lis = new ArrayList<Oval>();

    private void myfunc() {
        //add to list here...
    }
}

不管怎样,这真的与继承无关。无论你有好卷心菜还是坏卷心菜,椭圆形始终属于椭圆形。

编辑:另外,良好的 Java 实践:不要使用对 ArrayLists(或 LinkedLists 或 HashLists ...)的引用。只需使用 List 界面。它使它更加通用,并且不会花费您任何费用。

EDIT2:类型问题。列出编译器花花公子。将您的代码更改为:

N_GOOD_CABBAGES = 10 //in a separate interface

for(int j = 0; j < N_GOOD_CABBAGES; j++){
    Cabbage good = new Cabbage(); //Cabbage(), not Cabbage().draw()
    cabbages.add(j, good.draw()); //good.draw() not Cabbage.draw(), that's an abstract function
}
于 2013-06-10T01:27:18.537 回答
0

你的意思是这样的吗?

List<Cabbage> = new ArrayList<Cabbage>(); 
    // an arraylist that holds cabbages (good or otherwise)

N_GOOD_CABBAGES = 10 //in a separate interface

for(int j = 0; j < N_GOOD_CABBAGES; j++){
    Cabbage good = new GoodCabbage(); // make a good cabbage
    cabbages.add(good); // add it to the list
}
于 2013-06-10T01:27:58.777 回答