我正在构建一个简单的行为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;
}
}
我试图复制方法,它扩展了常规的类之一,但是,这并不工作,要么在同样的问题出现。 静态需求在包含这个的start()和act()方法上尤其困难。并且是初始化器。 我只能使用update()方法,在例程中初始化Droid和它将执行的电路板 - 但我不认为这很像我想要的解决方案。
是否可以使用工厂初始化一个这样的类并使用实例?你可以声明最后的例程例程= RoutineFactory.createRoutine();并根据需要在您的电话中使用它。您将需要一个实现,以根据需要更新特定于实例的项目来运行这些方法。为什么你不能使用继承? –
你当然需要一个对象实例来调用它的方法(抽象与否)。 – Thilo