我可以在 class 中增加变量的特异性,在 java 中扩展另一个 class 吗?
Can I increase the specificity of a variable in a class extending another class in java?
我正在开发一款游戏,我在其中使用处理程序对象来处理所有渲染和滴答行为。每个 scene
对应一个不同的 handler
对象。我的每个处理程序都有一组特定于该类型处理程序的方法。例如,只有级别处理程序具有 addPlayer
和 addEnemy
方法。
我想像这样定义一个泛型 Scene
class:
public class Scene {
protected Handler handler;
public Scene(Handler handler){
this.handler = handler;
}
public void render(Graphics g){
handler.render(g);
}
}
然后我想定义一个场景的子class,这将是特定于玩家玩游戏时的场景对象,称为levelScene
:
public class LevelScene extends Scene {
protected LevelHandler; //<- This doesn't work.
}
我想在 LevelScene
中访问特定于 LevelHandler
的方法,同时让 Scene
class 处理处理程序的呈现和滴答。似乎最好的方法是指定,对于我的 LevelScene
class,处理程序是一个 LevelHandler
,它是一个扩展的 class Handler
。执行此操作的最佳方法是什么?
我推荐使用泛型。这样,Scene
超类就像对待任何其他处理程序一样对待您的处理程序,但 LevelScene
确保它是一个 LevelHandler。
public class Scene<HandlerType extends Handler> {
protected HandlerType handler;
public Scene(HandlerType handler){
this.handler = handler;
}
public void render(Graphics g){
handler.render(g);
}
}
那么你的子类可以是
public class LevelScene extends Scene<LevelHandler> {
@Override
public void render(Graphics g) {
super(g);
handler.doLevelOnlyThing();
}
}
我正在开发一款游戏,我在其中使用处理程序对象来处理所有渲染和滴答行为。每个 scene
对应一个不同的 handler
对象。我的每个处理程序都有一组特定于该类型处理程序的方法。例如,只有级别处理程序具有 addPlayer
和 addEnemy
方法。
我想像这样定义一个泛型 Scene
class:
public class Scene {
protected Handler handler;
public Scene(Handler handler){
this.handler = handler;
}
public void render(Graphics g){
handler.render(g);
}
}
然后我想定义一个场景的子class,这将是特定于玩家玩游戏时的场景对象,称为levelScene
:
public class LevelScene extends Scene {
protected LevelHandler; //<- This doesn't work.
}
我想在 LevelScene
中访问特定于 LevelHandler
的方法,同时让 Scene
class 处理处理程序的呈现和滴答。似乎最好的方法是指定,对于我的 LevelScene
class,处理程序是一个 LevelHandler
,它是一个扩展的 class Handler
。执行此操作的最佳方法是什么?
我推荐使用泛型。这样,Scene
超类就像对待任何其他处理程序一样对待您的处理程序,但 LevelScene
确保它是一个 LevelHandler。
public class Scene<HandlerType extends Handler> {
protected HandlerType handler;
public Scene(HandlerType handler){
this.handler = handler;
}
public void render(Graphics g){
handler.render(g);
}
}
那么你的子类可以是
public class LevelScene extends Scene<LevelHandler> {
@Override
public void render(Graphics g) {
super(g);
handler.doLevelOnlyThing();
}
}