抽象渲染方法如何工作? (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的子类,呈现在子类中的方法将被自动调用?

+0

@martynas但是如何调用构造函数?据我所知,你不能调用抽象类的构造函数,只能调用它的子类的构造函数 – FidgetyTheGamer

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