JD.OVER

当子类定义了一个方法,而其超类含有一个所定义名称相同但签名不同的方法,并且类和超类的其他方法不含有此相同名称时,发生 JD.OVER。

漏洞与风险

在某些情况下,可以尝试覆盖超类中的一个方法,但参数列表会不匹配,因此不能覆盖超类方法。当超类而不是子类中的方法签名发生改变时,可能会发生这种情况。如果设计者特意设计了此行为,则并非错误。

缓解与预防

如果这是错误,则在子类中修复方法签名。

示例 1

复制
  public class JD_OVER_Sample_1 {
      class MyClass {
         void init(int i) {
 
         }
     }
 
     class MyOtherClass extends MyClass {
         void init() {
 
         }
     }
 }

针对第 16 行的方法声明报告 JD.OVER:可能错误覆盖了方法“init()”。或许,原本要覆盖的是类 com.klocwork.jdefects.checkers.ast.samples.JD_OVER_Sample_1$MyClass 中的 init(int)。