抽象渲染方法如何工作? (JAVA)

时间:2014-03-12 23:42:01

标签: java render subclass abstract game-loop

所以说你想要一个名为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方法将被自动调用?

2 个答案:

答案 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接口,子类(多态)。