Как будет работать абстрактный метод рендеринга? (Ява)

1

Поэтому скажите, что вы хотите иметь абстрактный класс, называемый play, который имеет метод рендеринга.

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
abstract
subclass
game-loop

2 ответа

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);
        }
    }
}
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, подклассы (полиморфизм).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню