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

Java父子类同签名静态方法隐藏规则及运行输出问题咨询

问题解释

你对Java静态方法「隐藏」的规则理解存在偏差,实际运行结果是完全符合Java语法规范的,核心原因如下:

  • 静态方法属于类本身,和实例无关,调用时绑定的是你显式指定的类,不存在实例方法那样的动态多态分派。
  • 子类和父类存在同签名静态方法时,是子类的静态方法隐藏父类的同签名静态方法,而非父类方法覆盖子类方法。

你代码里的两处调用逻辑非常明确:

  1. 调用Obcount.num_obj():显式指定调用父类Obcount的静态方法,因此输出i am parent class。
  2. 调用Doing.num_obj():显式指定调用子类Doing的静态方法,子类已经实现了同签名的num_obj(),会优先用子类自身的实现,因此输出i am child class。

你可能混淆了向上转型场景下的隐藏表现:如果写的是Obcount test = new Doing(1,2); test.num_obj();,此时输出才会是i am parent class,因为静态方法看的是变量的声明类型(此处是Obcount)而非实际实例类型,这才是「隐藏」的含义:当通过父类类型调用时,父类的方法会被子类隐藏的实现又显露出来,不会像实例方法重写那样走实际实例的实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:45:03