Java方法重写失效排查:为何仅输出"Running!"?
为什么重写的方法没执行?
你遇到的问题核心是实例对象的类型不对——虽然你正确重写了父类的方法,但如果运行时创建的是父类Game的实例,而不是子类Loader的实例,Java只会调用父类的空实现,自然看不到子类里的打印内容。
问题重现(你可能的错误写法)
假设你的main方法是这样的:
public class Main { public static void main(String[] args) { Game game = new Game(); // 这里创建的是父类实例 game.run(); } }
这种情况下,run()里调用的init()、render()、release()都是父类的空方法,所以只会输出Running!。
正确的写法
要让重写的方法生效,你需要创建子类Loader的实例,即使引用类型是父类Game也没关系(Java多态特性):
public class Main { public static void main(String[] args) { // 方式1:父类引用指向子类对象(多态写法) Game game = new Loader(); game.run(); // 方式2:直接用子类类型的引用 // Loader loader = new Loader(); // loader.run(); } }
运行结果
执行上面的代码后,控制台会输出:
Running! Initializing Rendering Releasing.
补充说明
Java的多态机制是:当你调用一个方法时,实际执行的是运行时对象所属类的方法。你的重写代码本身完全正确,只是在实例创建的环节选错了对象类型,导致子类的方法没被触发~
内容的提问来源于stack exchange,提问作者hjknvcaesdbuihjase
相关产品推荐
相关产品推荐

