私は単純な行動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;
}
}
私はルーチンを拡張するクラスの1つにする方法をコピーしようとしたが、それは動作しませんか同じ問題が生じる。 静的要件は、これを含むstart()およびact()では特に困難です。初期化子です。 メソッドupdate()は、ドロイドを初期化してボードを動作させるルーチンのようにしかできませんが、これは私が持っていたいソリューションのようには見えません。
このようなクラスを工場で初期化してインスタンスを使用することは可能ですか?あなたは最終ルーチンルーチン= RoutineFactory.createRoutine()を宣言できます。必要に応じてあなたの電話でそれを使用してください。インスタンス固有の項目を更新するのに必要なメソッドを実行するための実装が必要になります。なぜあなたは継承を利用できないのですか? –
メソッドを呼び出すには、オブジェクトインスタンスが必要です(抽象であるかどうかは関係ありません)。 – Thilo