我有一个抽象方法“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()未定义
答案 0 :(得分: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
进口可能有冲突。
答案 1 :(得分:0)
我认为您在发布的代码中正在使用和访问您的抽象类。
我建议问题出在AppStat类的某个地方。特别要查看AppStat.antList并查看是否可能意外创建或引用了不同的BaseAnt类。
正如其他人所提到的那样,比较字符串的方式存在问题,您需要查看它,但这不是导致您看到的错误的原因。