我正在尝试学习如何将继承用于类项目,制作游戏。对不起,他们的名字很傻。我有一个抽象类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());
}
希望这是足够的信息。谢谢你的帮助。
答案 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
}