You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java多态中父类引用为何调用父类静态方法而非子类重写方法?

问题原因解析

核心问题在于:Java的静态方法不参与多态机制,它的调用逻辑和实例方法完全不同。

  • 静态方法属于类而非对象,调用时由引用变量的编译时类型决定,和运行时实际指向的对象类型无关。你的代码里gen的编译时类型是Generator,所以编译阶段就已经确定要调用Generator类的acceptPending()方法,和它实际指向GeneratorNeo对象没有关系。
  • 子类中的static acceptPending()不是对父类方法的“重写”,而是隐藏了父类的同名静态方法。重写只针对实例方法,如果你尝试给子类的静态方法加上@Override注解,编译器会直接报错,这也能证明两者不是重写关系。
  • 如果想调用子类的静态方法,要么直接通过子类名调用:GeneratorNeo.acceptPending(),要么把引用变量声明为子类类型:GeneratorNeo gen = new GeneratorNeo();,此时调用gen.acceptPending()才会执行子类的版本。

内容的提问来源于stack exchange,提问作者Austin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 09:59:58