所以说,你想有一个游戏叫抽象类,其中有一个渲染方法。
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接口,子类(多态性)。