我有一个名为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()方法之前和之后做一些工作。
谢谢
答案 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();