gpt4 book ai didi

java - 是否可以在不扩展它的类方法中引用抽象类方法?

转载 作者:搜寻专家 更新时间:2023-10-31 20:32:55 24 4
gpt4 key购买 nike

我正在学习有关构建简单行为 Ai 的教程。它的“大脑”类是抽象的,包含“运行”、“成功”、“失败”等状态。现在在我的 ai 单元 - 机器人类中,我有一种方法可以启动机器人的大脑。

    public void update(){

if(Routine.getState()==null){
Routine.start();
}
Routine.act(this, board);

}

现在这在 java 中是不可能的,因为它是对非静态方法的静态引用。我在这里尝试引用的例程抽象类是这样的:

public abstract class Routine {

public enum RoutineState{
Success,
Failure,
Running
}

protected RoutineState state;

protected Routine() { }

public void start(){
this.state = RoutineState.Running;
}

public abstract void reset();

public abstract void act(droid droid, board board);

public void succed(){
this.state = RoutineState.Success;
}

public void Fail(){
this.state = RoutineState.Failure;
}

public boolean isSuccess(){
return state.equals(RoutineState.Success);
}

public boolean isFailure(){
return state.equals(RoutineState.Failure);
}

public boolean isRunning(){
return state.equals(RoutineState.Running);
}

public RoutineState getState(){
return state;
}


}

我已经尝试将方法复制到扩展 Routine 的类之一,但这不起作用,同样的问题出现了。静态要求对包含它的 start() 和 act() 尤其困难。并且是初始值设定项。我只能像现在这样制作方法 update() ,在我初始化机器人和它将作用的板的例程中 - 但我不认为这很像我想要的解决方案。

最佳答案

当然,你可以引用一个抽象类并调用它的抽象类,但你确切引用的对象应该是抽象类的扩展。

例如,创建一个不同对象的列表,所有对象都扩展一个抽象类。

public abstract class ExAbstract { public abstract void abstractmethod() {...} }
public class ExampleA extends ExAbstract { @Override... }
public class ExampleB extends ExAbstract { @Override... }
...

List<ExAbstract> list = new ArrayList<>();
list.add(new ExampleA());
list.add(new ExampleB());
...

然后,您可以在其上调用抽象方法。

for (ExAbstract test : list){
test.abstractmethod();
}

(或Java 8)

list.forEach(ExAbstract::abstractmethod);

但是如果对象没有扩展抽象,并且它本身是抽象的,它就会报错。

编辑:在你的例子中,对于 Routine 类,你应该为它创建一个构造函数,然后创建一个新对象。 (我看到你已经有一个构造函数了......)如果你想使用一个方法而不创建一个对象,使用 static

在 Routine.java 中:

public Routine(ExampleArg a){
this.a = a;
}

在您的日常通话中:

Routine r = new Routine(a);
r.start();

关于java - 是否可以在不扩展它的类方法中引用抽象类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35699684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com