【问题标题】:Can't use abstract method [duplicate]不能使用抽象方法[重复]
【发布时间】:2013-11-23 13:29:49
【问题描述】:

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

【问题讨论】:

  • “我不能打电话”是什么意思?你得到一个编译错误?运行时是否出现异常?该方法根本没有被调用吗?
  • "BaseAnt 类型的方法 action() 未定义"
  • 您在本应有.equals("Worker") 时却写了== "Worker" 却犯了一个错误。但是,这不是您的编译器错误的原因。
  • 首先,您的比较有缺陷,这就是我所指的。至于未定义的方法,到目前为止我看到的唯一解释是您使用的是不同的 BaseAnt 类,并且存在导入问题。

标签: java android abstract-class


【解决方案1】:

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 导入。

【讨论】:

  • 哦,谢谢,但现在其他问题。我不能调用方法操作
【解决方案2】:

我认为您在发布的代码中可以正常使用和访问您的抽象类。

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

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

【讨论】:

    猜你喜欢
    • 2016-06-20
    • 2014-08-28
    • 2021-09-01
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 2021-08-11
    • 2019-07-14
    • 1970-01-01
    相关资源
    最近更新 更多