java如何将子类对象添加到另一个类的ArrayList中

时间:2013-06-10 01:19:32

标签: java inheritance

我正在尝试学习如何将继承用于类项目,制作游戏。对不起,他们的名字很傻。我有一个抽象类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());
}

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

2 个答案:

答案 0 :(得分:0)

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

A)

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

B)

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
}

答案 1 :(得分: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
}