Как я могу переопределить методы? - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь переопределить методы init(), render() и release(), но не могу заставить его работать. Я посмотрел учебники по переопределению и проверил следующее:

  • Переопределение методов происходит внутри подкласса исходных методов
  • Имена методов точно такие же
  • Параметры одинаковы (в данном случае нет)

У меня есть 2 класса:

public class Game {
    public void run() {
        System.out.println("Running!");
        init();
        render();
        release();
    }

    public void init() {}

    public void render() {}

    public void release() {}
}

и

public class Loader extends Game {

    @Override
    public void init() {
        System.out.println("Initializing");
    }

    @Override
    public void render() {
        System.out.println("Rendering");
    }

    @Override
    public void release() {
        System.out.println("Releasing.");
    }

}

Почему единственное, что напечатано на консоли «Running!»?

Ответы [ 2 ]

3 голосов
/ 09 февраля 2020

Для получения желаемого результата вы должны использовать метод run () из переопределенного объекта класса Loader, а не из объекта Game.

1 голос
/ 09 февраля 2020

Вы должны переопределить функцию Game # run, создав метод в подклассе с аннотацией @Override.

public class Loader extends Game {

    @Override
    public void run() {
        System.out.println("Running from Loader!");
    }

}

Когда вы определяете объект Game, вы должны создать новый объект Loader.

Game game = new Loader();

game.run(); // this object is an instance of Loader so Loader#run() is called. 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...