天天看點

Java中@Override 的作用

在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 語句可以防止我們在進行覆寫時,不小心誤操作,寫成了重載。這時編譯器會提示我們出現錯誤。