如何将一个抽象的渲染方法的工作? (JAVA)(How would an abstract re

2019-10-19 14:03发布

所以说,你想有一个游戏叫抽象类,其中有一个渲染方法。

public abstract class RenderPanel{

    public abstract void render();

}

然后,你还要另一类调用使用某种游戏循环的渲染方法。

public class Window implements Runnable{

public void run(){

    while(running){
        RenderPanel.render();
        Thread.sleep(5000);
    }
}

}

此代码是行不通的,因为你不能静态调用一个抽象类,你不能实例化类。

所以你怎么会去这一点,以便如果你让RenderPanel的子类,呈现在子类中的方法将被自动调用?

Answer 1:

保持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);
        }
    }
}


Answer 2:

我们的想法是创建一个扩展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接口,子类(多态性)。



文章来源: How would an abstract render method work? (Java)