簡體   English   中英

更改子類方法簽名時使用@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 Bfoo方法上添加@Override注釋時,我得到一個編譯錯誤:

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

好像我的覆蓋嘗試不再正確。

所以我有點困惑為什么會發生這種情況,以及添加注釋時會發生什么變化。

“編譯器將此理解為覆蓋方法” - 不正確,如果簽名不同,則它不是覆蓋方法。 在這里使用super是多余的,沒有super也可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM