覆盖一个方法不会工作

use*_*189 1 java opengl lwjgl

我正在尝试制作自己的引擎,但我需要一些帮助.

我目前正在做水平系统.level类扩展了render类,level类覆盖了Render类的render方法.最后,从主类调用render类,但我不调用level类.

编辑:

我已经删除了静态但现在无法调用render方法.我知道我很自我,有点教我自己.

package SimpleEngine.Render;
Run Code Online (Sandbox Code Playgroud)

渲染类(这称为)

import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
import SimpleEngine.Primitives.*;
import static org.lwjgl.opengl.GL11.glClear;

public class Render {

    public void Render() {

    }

}
Run Code Online (Sandbox Code Playgroud)

Level Class(未调用)我希望这个Render方法覆盖Render类的render方法,但它不起作用.

package SimpleEngine.Level;

    import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
    import static org.lwjgl.opengl.GL11.glClear;
    import SimpleEngine.Render.*;
    import SimpleEngine.Primitives.*;

    public class Level extends Render {

        public void Render() {
            glClear(GL_COLOR_BUFFER_BIT);
            Primitives.DrawSquare(200, 200, 50, 50, 1, 0, 0);
        }

    }
Run Code Online (Sandbox Code Playgroud)

我的主要方法(调用渲染但不能再渲染)

package SimpleEngine;

import org.lwjgl.LWJGLException;
import SimpleEngine.Level.*;
import SimpleEngine.Logic.*;
import SimpleEngine.Input.*;
import SimpleEngine.Render.*;
import SimpleEngine.Entites.*;
import SimpleEngine.Timer.*;
import org.lwjgl.Sys;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;

import static org.lwjgl.opengl.GL11.*;

public class simpleEngine {

    public static final int WIDTH = 640;
    public static final int HEIGHT = 480;
    private static boolean isRunning = true;


    public static void main(String[] args) {
        setUpDisplay();
        setUpOpenGL();
        Entity.setUpEntities();
        Timer.setUpTimer();
        while (isRunning) {
            Render.Render();
            Logic.logic(Timer.getDelta());
            Input.input();
            Display.update();
            Display.sync(60);
            if (Display.isCloseRequested()) {
                isRunning = false;
            }
        }
        Display.destroy();
        System.exit(0);
    }

    private static void setUpDisplay() {
        try {
            Display.setDisplayMode(new DisplayMode(WIDTH, HEIGHT));
            Display.setTitle("SimpleEngine");
            Display.create();
        } catch (LWJGLException e) {
            e.printStackTrace();
            Display.destroy();
            System.exit(1);
        }
    }

    private static void setUpOpenGL() {
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(0, 640, 480, 0, 1, -1);
        glMatrixMode(GL_MODELVIEW);
    }

}
Run Code Online (Sandbox Code Playgroud)

kos*_*osa 5

您无法覆盖静态方法.

根据Oracle tutorail

如果子类定义的类方法与超类中的类方法具有相同的签名,则子类中的方法会隐藏超类中的方法.

如果尝试将超类中的实例方法更改为子类中的类方法,则会出现编译时错误,反之亦然.

staticRenderrender()方法中删除并更改Level类Render方法render()以引入覆盖行为

编辑:

 while (isRunning) {
            new Level().Render(); 
Run Code Online (Sandbox Code Playgroud)

注意:Java命名约定建议方法名称应以小写字母开头,名称应为camelcase.