Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';不要用抽象的方法_Java_Android_Abstract Class - Fatal编程技术网

Java Can';不要用抽象的方法

Java Can';不要用抽象的方法,java,android,abstract-class,Java,Android,Abstract Class,我有一个抽象类,其抽象方法为“Action” 类工作者扩展了它: public class WorkerAnt extends BaseAnt { public WorkerAnt() { /.../ } public void action() { AppStat.FOOD += mAge*0.1 + 10; } } 我试着做一个循环 public ArrayList<BaseAnt> antsArr

我有一个抽象类,其抽象方法为“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();
        }
    }
公共数组列表antsArray;
对于(int i=0;i
但我不能调用方法操作!如何修复它

错误:

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


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!!!");
        }

    }

}
import java.util.ArrayList;
导入java.util.List;
公共类基本问题{
公共静态void main(字符串[]args){
新的基本问题();
}
公共基础问题(){
List ants=new ArrayList();
对于(int i=0;i<10;i++){
添加(新WorkerAnt());
}
用于(BaseAnt蚂蚁:蚂蚁){
ant.action();
}
}
公共抽象类BaseAnt{
公开抽象无效诉讼();
}
公共类WorkerAnt扩展BaseAnt{
@凌驾
公共无效行动(){
System.out.println(“Action!!!”;
}
}
}
而且效果很好


你能把
AppStat
类贴出来吗?我的直觉告诉我你可能在那里导入了冲突的
BaseAnt

我认为你在发布的代码中使用和访问了你的抽象类

我建议问题出在AppStat类的某个地方。特别是查看AppStat.antList,看看是否意外创建或引用了不同的BaseAnt类


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

你说“我不能打电话”是什么意思?你有编译错误吗?运行时是否出现异常?是否只是没有调用该方法?“类型BaseAnt的方法操作()未定义”您在应该使用
.equals(“Worker”)
时,通过写入
==“Worker”
而犯了错误。但是,这不是编译器错误的原因。首先,您的比较有缺陷,这正是我所指的。至于未定义的方法,到目前为止我看到的唯一解释是,您使用的是不同的BaseAnt类,并且有一个导入问题。哦,thnx,但现在是另一个问题。我不能称之为方法行动
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!!!");
        }

    }

}