Java 何时使用super.render();super.dispose();super.pause();和super.resize(w,h);在Libgdx中?

Java 何时使用super.render();super.dispose();super.pause();和super.resize(w,h);在Libgdx中?,java,android,inheritance,libgdx,super,Java,Android,Inheritance,Libgdx,Super,在下面的代码中,我从Game扩展了MyGame。我有两个问题: 我们是否需要为所有render()、dispose()、pause()和resize(w,h)调用super方法? 许多人没有在代码中加入super.pause()和super.resize(w,h)。 所以,我对这里的超级电话感到非常困惑 我尝试删除上面所有的超级方法(super.render();也被删除),我仍然可以在桌面模式(即desktopLauncher.java)下成功运行我的代码。有人能解释一下原因吗 这是我的密码:

在下面的代码中,我从
Game
扩展了
MyGame
。我有两个问题:

  • 我们是否需要为所有
    render()
    dispose()
    pause()
    resize(w,h)
    调用
    super
    方法? 许多人没有在代码中加入
    super.pause()
    super.resize(w,h)
    。 所以,我对这里的超级电话感到非常困惑

  • 我尝试删除上面所有的超级方法(
    super.render()
    ;也被删除),我仍然可以在桌面模式(即desktopLauncher.java)下成功运行我的代码。有人能解释一下原因吗

  • 这是我的密码:

    public class MyGame extends Game {
        Game game;
    
        @Override
        public void create() {
            game = this;
            setScreen(new MainMenu(game));
        }
    
        @Override
        public void render() {
            super.render();
        }
        @Override
        public void dispose() {
            super.dispose();
        }
        @Override
        public void pause() {
            super.pause();
        }
        @Override
        public void resize(int width, int height) {
             super.resize(width, height);  
    
        }
    }
    
    如果我删除所有未使用的方法,只保留create()方法如下,我将成功运行代码

        public class MyGame extends Game {
        Game game;
    
        @Override
        public void create() {
            game = this;
            setScreen(new MainMenu(game));
        }
        }
    

    有人想解释这种情况吗?

    超级方法调用超级类上的相同方法(在本例中)。如果您愿意,您可以在游戏中看到这些方法,只需将调用转发到包含
    屏幕的
    实例(如果有)。例如,在
    render
    方法中,如果调用将执行
    Game.render
    方法的
    super.render()

    因此,对于您的特定情况,这些方法可能是严格必要的,也可能不是严格必要的(主要取决于您是否设置了
    屏幕
    ,以及屏幕实现本身是否需要回调)。但是,一般来说,在扩展类方法的实现时,您通常希望调用超级类方法,以便完成它需要完成的任何事情


    许多Libgdx和Android类都是这样设计的(它们实现了一点功能,但期望子类实现更多功能,并且期望子类调用超类方法)。理想情况下,类上的文档将以这种或那种方式进行解释,但我认为您应该假设(特别是在本例中)调用超类方法是正确的做法

    我发现:如果render()为空,则会出现黑屏。这很清楚,因为我没有使用super.render()。但是,我不能简单地忽略render()方法。只要重写create(),我就可以成功运行代码。