抽象渲染方法如何工作? (Java)
问题描述:
所以说你想要一个叫做play的抽象类,它有一个渲染方法。抽象渲染方法如何工作? (Java)
public abstract class RenderPanel{
public abstract void render();
}
然后你有另一个类,使用某种游戏循环来调用渲染方法。
public class Window implements Runnable{
public void run(){
while(running){
RenderPanel.render();
Thread.sleep(5000);
}
}
}
此代码不起作用,因为您无法静态调用抽象类,也无法实例化类。
那么你会如何去这个问题,这样如果你让RenderPanel的子类,呈现在子类中的方法将被自动调用?
答
Java保留运行时类型信息(RTTI)。这意味着即使您持有对基类对象的引用,子类的方法也会被调用(如果方法被子类覆盖)。所以你不必做任何事情,所以作为子类方法被调用。
public class SubRenderPanel extends RenderPanel{
@Override
public abstract void render()
{
//Do your stuff here
}
}
public class Window implements Runnable{
RenderPanel r = new SubRenderPanel();
public void run(){
while(running){
r.render();
Thread.sleep(5000);
}
}
}
答
的想法是创建一个扩展RenderPanel一个新的类,并使用一个:
public class SubRender extends RenderPanel{
@Override
public abstract void render()
{
//Do your stuff here
}
}
然后你想创建SubRender的实例,并把它作为RenderPanel:
public class Window implements Runnable{
public void run(){
while(running){
//The subRender will act as a RenderPanel, so class specific functions will be hidden. Is just like using an java interface.
RenderPanel r = new SubRender();
r.render();
Thread.sleep(5000);
}
}
}
你现在所拥有的基本上是一个作为接口的抽象类。我建议你改用一个接口。抽象类最常用于为对象的“类型”提供常见行为,在您的情况下,您希望具有“类型”的渲染。
但是,这种共同的行为缺少,所以我会用一个接口来代替。
研究一些可通过互联网获得的Java教程。 这是一个非常基本的java问题。搜索关于Java接口的子类(多态)。
@martynas但是如何调用构造函数?据我所知,你不能调用抽象类的构造函数,只能调用它的子类的构造函数 – FidgetyTheGamer