我可以在扩展java中另一个类的类中增加变量的特异性吗?

时间:2015-11-09 02:02:22

标签: java class extends

我正在开发一个游戏,我在其中使用处理程序对象来处理所有渲染和滴答行为。每个scene对应一个不同的handler对象。我的每个处理程序都有一组特定于该类型处理程序的方法。例如,只有级别处理程序具有addPlayeraddEnemy方法。

我想像这样定义一个通用的Scene类:

public class Scene {
    protected Handler handler;

    public Scene(Handler handler){
        this.handler = handler;
    }

    public void render(Graphics g){
        handler.render(g);
    }
}

然后我想定义一个我的场景的子类,它将是特定于玩家玩游戏时的场景对象,称为levelScene

public class LevelScene extends Scene {
    protected LevelHandler; //<- This doesn't work.
}

我想在LevelHandler中访问特定于LevelScene的方法,同时让Scene类处理渲染并使用处理程序进行滴答。这似乎是最好的方法是指定,对于我的LevelScene类,处理程序是LevelHandler,这是一个扩展Handler的类。这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:5)

我建议使用泛型。这样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();
    }
}