在Java中 @Override的作用如下:在覆寫(重寫)基類的某個方法時,防止自己不小心重載了該方法,而不是覆寫該方法。
首先說明下重載和覆寫的概念:
重載(Overloading):子類改寫父類的方法,方法名相同,參數清單不同(個數或類型不同),不過傳回值的類型可以相同也可以不同。
補充一下,當兩個方法的參數清單相同,即參數的個數與類型相同時,傳回類型必須相同,否則編譯不通過,傳回值的類型不影響重載。而且當兩個方法的參數的個數與類型均相同,但各參數的順序不同時,也算重載。
覆寫(Overriding):子類中的方法與父類中的方法名字一緻,傳回值類型以及參數清單均一緻則為覆寫(重寫)。
下面舉例說明:
子類test繼承于父類father_test,覆寫了父類中的方法f(),并在前面添加了@Override。此時編譯運作通過,列印出"test"。
class father_test{
void f(int b) {
System.out.println("father_test");
}
}
public class test extends father_test{
@Override
void f(int a) {
System.out.println("test");
}
public static void main(String[] args) {
test T=new test();
T.f(1);
}
}
将子類中覆寫的方法f()的參數a改成char類型,這時覆寫就變成了重載,而編譯器就報錯了。提示:類型為 test 的方法 f(char)必須覆寫或實作超類型方法。
而去掉@Override語句後編譯器不再報錯,運作後列印出"father_test"。
class father_test{
void f(int b) {
System.out.println("father_test");
}
}
public class test extends father_test{
@Override
void f(char a) {
System.out.println("test");
}
public static void main(String[] args) {
test T=new test();
T.f(1);
}
}
可見 @Override 語句可以防止我們在進行覆寫時,不小心誤操作,寫成了重載。這時編譯器會提示我們出現錯誤。