Java Can';不要用抽象的方法
我有一个抽象类,其抽象方法为“Action” 类工作者扩展了它: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
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!!!");
}
}
}