为什么我不能将抽象类的方法初始化而不将其更改为静态?

时间:2016-02-28 18:32:53

标签: java static abstract

我正在制作一个关于构建简单行为Ai的教程。 它的大脑' class是抽象的,包含"运行","成功","失败"等状态。 现在在我的ai单元 - 机器人类我有一个启动机器人的方法

public void update(){

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

}

Eclipse告诉我Routine的方法无效,因为:

  

无法从类型Routine

中对非静态方法getState()进行静态引用

我可以为getState做些什么,但我必须将RoutineState更改为静态,但我不能为开始做或按行为进行操作this.

到目前为止,这是ai的大脑:

public abstract class Routine {

    public enum RoutineState{
        Success,
        Failure,
        Running
    }


    public RoutineState getState(){
        return state;
    }

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



}

1 个答案:

答案 0 :(得分:3)

如果state是一个类字段,它应该是静态的,如下所示。

否则,您需要一个对象才能获得自己的状态。

public static RoutineState getState(){
    return state;
}

protected static RoutineState state;