0

我有一个带有抽象方法“Action”的抽象类

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();
        }
    }

但我不能调用方法动作!如何解决?

错误:

未定义 BaseAnt 类型的方法 action()

4

2 回答 2

0

我认为您在发布的代码中使用和访问您的抽象类很好。

我建议问题出在您的 AppStat 类中。特别是查看 AppStat.antList 并查看您是否可能意外创建或引用了不同的 BaseAnt 类。

正如其他人所提到的,您比较字符串的方式存在问题,您将要查看该问题,但这不是导致您看到的错误的原因。

于 2013-11-11T17:10:12.770 回答
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 回答