0

抽象メソッド「アクション」を持つ抽象クラスがあります

public abstract class BaseAnt {
    public BaseAnt(String name, int food, int water) {
        /.../
    }

    public abstract void action ();   
}

クラスワーカーはそれを拡張します:

   public class WorkerAnt extends BaseAnt {
    public WorkerAnt() {
        /.../
    }

    public void action() {
        AppStat.FOOD += mAge*0.1 + 10;
    }
}

そして、私はループを作ろうとしています

    public ArrayList<BaseAnt> antsArray;
        for (int i = 0; i < AppStat.antList.size(); i++) {
        if (AppStat.antList.get(i).getName() == "Worker") {
            AppStat.antList.get(i).action();
        }
    }

しかし、私はメソッドアクションを呼び出すことができません! 修正方法は?

エラー:

メソッド action() はタイプ BaseAnt に対して未定義です

4

2 に答える 2

0

Java の文字列は次のように比較されます。

String foo = "foo";
String bar = "bar";
String foo2 = "foo";

foo.compareTo(bar); // false
foo.compareTo(foo2); // true

を比較すると(foo == foo2)、実際には参照を比較していますが、これはあなたの場合はノーノーです。

編集:小さなテスト例を書きました:

import java.util.ArrayList;
import java.util.List;


public class BaseAntQuestion {

    public static void main(String[] args) {
        new BaseAntQuestion();
    }

    public BaseAntQuestion() {
        List<BaseAnt> ants = new ArrayList<>();

        for (int i = 0; i < 10; i++) {
            ants.add(new WorkerAnt());
        }

        for (BaseAnt ant : ants) {
            ant.action();
        }
    }

    public abstract class BaseAnt {
        public abstract void action();
    }

    public class WorkerAnt extends BaseAnt {

        @Override
        public void action() {
            System.out.println("Action!!!");
        }

    }

}

そして、それはうまく機能します。

AppStatクラスを投稿できますか?BaseAnt私の腸は、そこに競合するインポートがあるかもしれないと言っています。

于 2013-11-11T16:49:05.640 に答える
0

投稿したコードで抽象クラスを使用してアクセスしていると思います。

問題が AppStat クラスのどこかにあることをお勧めします。特に AppStat.antList を見て、別の BaseAnt クラスを誤って作成または参照していないかどうかを確認してください。

他の人が述べたように、文字列を比較する方法に問題がありますが、それはあなたが見ているエラーの原因ではありません。

于 2013-11-11T17:10:12.770 に答える