所以说你想要一个名为play的抽象类,它有一个render方法。
public abstract class RenderPanel{
public abstract void render();
}
然后你有另一个类使用某种游戏循环来调用render方法。
public class Window implements Runnable{
public void run(){
while(running){
RenderPanel.render();
Thread.sleep(5000);
}
}
}
此代码不起作用,因为您无法静态调用抽象类,并且无法实例化该类。
那么你如何做到这一点,如果你创建一个RenderPanel的子类,子类中的render方法将被自动调用?
答案 0 :(得分:2)
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);
}
}
}
答案 1 :(得分:0)
我们的想法是创建一个扩展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接口,子类(多态)。