[英]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
也可以正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.