Java - 子类上的调用方法(在完成方法之前处理'用户代码')?

时间:2016-05-20 19:46:04

标签: java inheritance subclass superclass super

我有一个名为GameEngine的基类,它应该是我“游戏引擎”的“核心”。它完成所有图形处理和物理滴答。但是,我不想在本课程中为游戏提供实际的源代码。所以这基本上就是我所拥有的:

//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()
    }

}

那么,如何让superclass在子类中调用render()方法呢?我无法覆盖超类方法,因为它需要在调用子类的render()方法之前和之后做一些工作。

谢谢

2 个答案:

答案 0 :(得分:3)

在超类中将render()声明为abstract方法,它在适当的位置调用。然后,子类通过使用具体实现覆盖它来定义此方法的行为。

答案 1 :(得分:1)

我会使用'插槽方法设计模式'。简而言之,您有一个算法的最后一系列步骤,但需要允许在特定步骤中对其进行参数化。这些特定步骤是调用'槽方法'的地方。 通常,槽方法是带有doXXX()前缀的受保护(抽象)方法。

示例:

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