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) Ovals の 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-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 に答える