在更改子 class 方法签名时使用 @Override 注释

Using @Override annotation when child class method signature is changed

因此,我试图更好地了解 Java 覆盖的工作原理。

我创建了这个基本代码:

     public class A { 
    
       public void foo(String s) {
           System.out.println("inside A");
            }
      }
      public class B extends A{ 
    
       public void foo(String s, String g) {
           super.foo(s);
           System.out.println("inside B");
            }
      }

此代码编译良好,虽然子方法的签名不同(2 个参数而不是一个),但使用 super 不会导致任何错误。在我看来,这意味着编译器将此理解为重写方法。

然而,当我在 class B 中的 foo 方法上添加 @Override 注释时,出现编译错误:

java: method does not override or implement a method from a supertype

好像我的覆盖尝试不再正确了。

所以我有点困惑为什么会这样,以及当我添加注释时会发生什么变化。

“编译器将此理解为重写方法” - 不正确,如果签名不同,则它不是重写方法。这里使用 super 是多余的,没有 super.

也可以正常工作