代码之家  ›  专栏  ›  技术社区  ›  Mario Zelic

更改子类方法签名时使用@重写注释

  •  0
  • Mario Zelic  · 技术社区  · 2 年前

    所以,我试图更好地理解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个参数而不是1个),但用法 super 不会导致任何错误。在我看来,这意味着编译器将其理解为重写方法。

    然而,当我添加 @Override 上的注释 foo 中的方法 class B ,然后我得到一个编译错误,表示:

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

    好像我的超越尝试不再正确。

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

    1 回复  |  直到 2 年前
        1
  •  2
  •   Jim Garrison    2 年前

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