不能使用抽象方法

时间:2013-11-11 16:45:51

标签: java android abstract-class

我有一个抽象方法“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()未定义

2 个答案:

答案 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类。

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