JUnit5测试中重写SimpleDate的isLeap方法报@Override编译错误
编译错误原因分析
核心原因是父类SimpleDate中的isLeap(int)方法为private私有访问权限,私有方法不支持重写,你在匿名子类中定义的同名同参数方法不属于方法重写范畴,因此@Override注解触发编译校验失败。
相关Java语法规则说明
- Java的方法重写仅对
public、protected、同包下的默认(包访问)权限方法生效,私有方法对子类完全不可见,子类无法继承、也无法重写私有方法。 - 你在匿名类中定义的
public boolean isLeap(int year)本质是和父类私有方法完全无关的新方法,不属于重写逻辑,不满足@Override注解的校验规则,因此编译器抛出对应错误。 - 即使你删除
@Override注解绕过编译报错,实际执行simpleDate.rangesOK()方法时,调用的还是父类的私有isLeap方法,不会执行你在匿名类中定义的Mock逻辑,测试不会按预期生效。
解决方案
修改父类SimpleDate的isLeap方法的访问权限,改为protected或者public即可,修改后重写逻辑就会生效,@Override注解不会再报错。
内容的提问来源于stack exchange,提问作者Soory
相关产品推荐
相关产品推荐

