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

为何@Override注解无法作用于静态方法?编译报错解析

为何@Override注解无法作用于静态方法?

测试代码

test.java

public class test
{
  protected static void testMethod() {}
}

testb.java

public class testb extends test
{
  @Override
  protected static void testMethod() {}
}

编译与错误信息

执行编译命令:

javac test.java testb.java

编译报错:

% javac test.java testb.java
testb.java:5: error: method does not override or implement a method from a supertype
@Override
^
1 error

问题解答

这是因为静态方法不存在“重写”(override)的概念,@Override注解就是用来标记实例方法对父类方法的重写,自然不能用在静态方法上。

具体来说:

  • 实例方法的重写是基于多态的,子类实例调用方法时会动态绑定到子类的实现;而静态方法属于类本身,调用时是静态绑定到所属类,子类的同名静态方法只是隐藏(hide)了父类的方法,不是重写。
  • @Override注解的作用是让编译器帮你校验:这个方法是不是真的重写了父类的实例方法。但静态方法根本不符合重写的规则,所以编译器会报错提示“该方法没有重写或实现父类/接口的方法”。
  • 移除注解后,编译器不会做重写校验,子类隐藏父类静态方法是Java允许的行为,所以就能正常编译了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:25:24