在Java中,@Override
注解用于指示一個方法應該覆蓋父類中的方法。然而,在使用@Override
注解時,有一些常見的誤區需要注意:
class Parent {
void foo(String s) { }
}
class Child extends Parent {
@Override
void foo(int i) { } // 參數類型不匹配,不是覆蓋父類方法
}
class Parent {
Number foo() { return 0; }
}
class Child extends Parent {
@Override
String foo() { return ""; } // 返回類型不匹配,不是覆蓋父類方法
}
注意:在Java中,協變返回類型是指子類可以聲明與父類相同方法簽名但返回類型是其子類型的情況。然而,這僅適用于返回值,不適用于方法參數。
public
,那么子類方法也必須是public
才能覆蓋它。如果子類方法的訪問修飾符更嚴格,編譯器會報錯。@Override
注解,或者在同一個類中重復使用@Override
注解。這些情況下,編譯器會報錯,因為@Override
注解只能用于覆蓋父類方法。class Parent {
void foo() { }
}
class Child extends Parent {
@Override
void bar() { } // 錯誤:不是覆蓋父類方法
@Override
void foo() { } // 錯誤:同一個類中重復使用@Override注解
}
為了避免這些誤區,建議在使用@Override
注解時仔細檢查方法簽名,并確保子類方法與父類方法在參數類型、數量、順序、返回類型和訪問修飾符方面完全匹配。