java中重寫父類方法加不加@Override詳解
java重寫父類方法加不加@Override
這個是我在剛學(xué)習(xí)java時遇到的問題,希望能給像我一樣的新手學(xué)習(xí)時帶來幫助,如有錯誤請指正,謝謝!
class Father{ public String name; public int age; public Father(){ } public void work(){ System.out.println("蓋房子"); } } class Son extends Father{ public int weight; public Son(){ } public void work(){ System.out.println(i); } }
上面子類的work()方法和基類work()方法的控制器類型(包括返回值類型、參數(shù)等)是完全一致的,這種情況加不加@Override都是可以的,都可以對基類方法進行重寫。
因為不寫的情況下,java虛擬機會進行自動識別。
class Son extends Father{ public int weight; public Son(){ } public int work(int i){ System.out.println(); } }
在上面這種情況下,work()方法會被系統(tǒng)認為是子類新定義的方法,沒有繼承基類,這也是被允許的。
class Son extends Father{ public int weight; public Son(){ } public int work(){ System.out.println(); return 1; } }
但是這種情況只修改返回值類型時,是不被允許的,其仍被看做基類的重寫,但是返回值類型變了,就會被編輯器認為基類重寫返回值類型不一致而報錯。
所以存在即合理,在編寫代碼時如果需要對基類進行重寫還是加上@Override比較好,還可以檢測一些容易忽略的錯誤。
@Override的作用
@Override是偽代碼,表示重寫(當然不寫也可以),不過寫上有如下好處:
1、可以當注釋用,方便閱讀
2、編譯器可以給你驗證@Override下面的方法名是否是你父類中所有的,如果沒有則報錯。
例如,你如果沒寫@Override,而你下面的方法名又寫錯了,這時你的編譯器是可以編譯通過的,因為編譯器以為這個方法是你的子類中自己增加的方法。
舉例:在重寫父類的onCreate時,在方法前面加上@Override 系統(tǒng)可以幫你檢查方法的正確性。
@Override public void onCreate(Bundle savedInstanceState) {…….}
這種寫法是正確的,如果你寫成:
@Override public void oncreate(Bundle savedInstanceState) {…….}
編譯器會報如下錯誤:
The method oncreate(Bundle) of type HelloWorld must override or implement a supertype method
以確保你正確重寫onCreate方法(因為oncreate應(yīng)該為onCreate)。
而如果你不加@Override,則編譯器將不會檢測出錯誤,而是會認為你為子類定義了一個新方法:oncreate
加不加@override有什么區(qū)別
1.簡單來說@override注解是告訴編譯器,下面的方法是重寫父類的方法
2.如果不寫@override注解去直接重寫方法,編譯器是不會判斷你是不是正確重寫了父類中的方法的。
如重寫方法時參數(shù)與父類不同,程序是不會提示報錯的。這會留下一個潛在的bug。
當你寫了@override注解時,程序會判斷你是否正確的重寫了父類的對應(yīng)方法。
而且加上此注解后,程序會自動屏蔽父類的方法。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mybatis注解方式完成輸入?yún)?shù)為list的SQL語句拼接方式
這篇文章主要介紹了Mybatis注解方式完成輸入?yún)?shù)為list的SQL語句拼接方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11在webservice里調(diào)用耗時方法出錯的解決方案
這篇文章主要介紹了在webservice里調(diào)用耗時方法出錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07Spring Security基于數(shù)據(jù)庫實現(xiàn)認證過程解析
這篇文章主要介紹了Spring Security基于數(shù)據(jù)庫實現(xiàn)認證過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08線程局部變量的實現(xiàn)?ThreadLocal使用及場景介紹
這篇文章主要為大家介紹了線程局部變量的實現(xiàn)?ThreadLocal使用及場景詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01