2016-05-20 7 views
0

私はGameEngineと呼ばれる基本クラスを持っています。これは私の "ゲームエンジン"の "コア"であるはずです。すべてのグラフィック処理と物理ダニを行います。しかし、私はこのクラスのゲームのための私の実際のソースコードを入れたくありません。だから、これは私が持っているもの、本質的である:Java - サブクラスのメソッドを呼び出す(終了メソッドの前にプロセス 'ユーザコード')?

//GameEngine 
void start() { 
    //While loop to call render() and tick() 
} 
void render() { 
    //BufferStrategy, etc. 
    //[[[[HERE]]]] Call method on subclass 
    //dispose() and show() 
} 
void tick() { } 

と...だから

//SampleGame 
public class SampleGame extends GameEngine { 
    public static void main(String[] args) { 
     new GameEngine().start(); 
    } 
    public void render() { 
     //This gets called before dispose() and show() 
    } 

} 

、どのように私はrender()メソッドは、スーパークラスでサブクラスで呼ばれるように得ることができますか?スーパークラスメソッドをオーバーライドすることはできません。なぜなら、サブクラスのrender()メソッドが呼び出される前後にいくつかの作業を行う必要があるからです。

ありがとう

+0

なぜそれがすべてのサブクラスのですか? 2つのコードを共有している他のコードはありますか?スーパークラスにそのインスタンスを作成せずにサブクラスのメソッドを呼び出すことはできません。 – Zircon

+0

OOP、継承、クラスの基本的な理解は欠けているようです。あなたは*おそらく*研究する必要があります – Amit

+0

私は最初に答えを書くことを考えましたが、このWikiリンクはあなたの質問に完全に答えます:https://en.wikipedia.org/wiki/Template_method_pattern#Example_in_Java –

答えて

3

はそれが適切なポイントで呼び出し、スーパークラスでabstract方法としてrender()を宣言します。次に、サブクラスは、このメソッドの動作を具体的な実装でオーバーライドすることによって定義します。

1

私は 'スロットメソッドデザインパターン'を使用します。つまり、最後の一連のステップがありますが、特定のステップでパラメータを設定できるようにする必要があります。これらの特定のステップは、「スロットメソッド」が呼び出される場所です。 通常、スロットメソッドは、doXXX()をプレフィックスとするprotected(abstract)メソッドです。

例:

//GameEngine 
void start() { 
    //While loop to call render() and tick() 
} 
void render() { 
    //BufferStrategy, etc. 
    doCallUserCode(); 
    //dispose() and show() 
} 
void tick() { } 
protected abstract doCallUserCode(); 
関連する問題