我正在尝试学习如何在一个类项目中使用继承,制作一个游戏。他们的名字很傻,抱歉。我有一个抽象类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());
}希望这是足够的信息。谢谢你的帮助。
发布于 2013-06-10 09:27:19
您需要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
}发布于 2013-06-10 09:27:59
你是说像这样的东西吗?
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
}https://stackoverflow.com/questions/17015769
复制相似问题