java中重寫(xiě)父類(lèi)方法加不加@Override詳解
java重寫(xiě)父類(lèi)方法加不加@Override
這個(gè)是我在剛學(xué)習(xí)java時(shí)遇到的問(wèn)題,希望能給像我一樣的新手學(xué)習(xí)時(shí)帶來(lái)幫助,如有錯(cuò)誤請(qǐng)指正,謝謝!
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);
}
}
上面子類(lèi)的work()方法和基類(lèi)work()方法的控制器類(lèi)型(包括返回值類(lèi)型、參數(shù)等)是完全一致的,這種情況加不加@Override都是可以的,都可以對(duì)基類(lèi)方法進(jìn)行重寫(xiě)。
因?yàn)椴粚?xiě)的情況下,java虛擬機(jī)會(huì)進(jìn)行自動(dòng)識(shí)別。
class Son extends Father{
public int weight;
public Son(){
}
public int work(int i){
System.out.println();
}
}
在上面這種情況下,work()方法會(huì)被系統(tǒng)認(rèn)為是子類(lèi)新定義的方法,沒(méi)有繼承基類(lèi),這也是被允許的。
class Son extends Father{
public int weight;
public Son(){
}
public int work(){
System.out.println();
return 1;
}
}
但是這種情況只修改返回值類(lèi)型時(shí),是不被允許的,其仍被看做基類(lèi)的重寫(xiě),但是返回值類(lèi)型變了,就會(huì)被編輯器認(rèn)為基類(lèi)重寫(xiě)返回值類(lèi)型不一致而報(bào)錯(cuò)。
所以存在即合理,在編寫(xiě)代碼時(shí)如果需要對(duì)基類(lèi)進(jìn)行重寫(xiě)還是加上@Override比較好,還可以檢測(cè)一些容易忽略的錯(cuò)誤。
@Override的作用
@Override是偽代碼,表示重寫(xiě)(當(dāng)然不寫(xiě)也可以),不過(guò)寫(xiě)上有如下好處:
1、可以當(dāng)注釋用,方便閱讀
2、編譯器可以給你驗(yàn)證@Override下面的方法名是否是你父類(lèi)中所有的,如果沒(méi)有則報(bào)錯(cuò)。
例如,你如果沒(méi)寫(xiě)@Override,而你下面的方法名又寫(xiě)錯(cuò)了,這時(shí)你的編譯器是可以編譯通過(guò)的,因?yàn)榫幾g器以為這個(gè)方法是你的子類(lèi)中自己增加的方法。
舉例:在重寫(xiě)父類(lèi)的onCreate時(shí),在方法前面加上@Override 系統(tǒng)可以幫你檢查方法的正確性。
@Override
public void onCreate(Bundle savedInstanceState)
{…….}
這種寫(xiě)法是正確的,如果你寫(xiě)成:
@Override
public void oncreate(Bundle savedInstanceState)
{…….}
編譯器會(huì)報(bào)如下錯(cuò)誤:
The method oncreate(Bundle) of type HelloWorld must override or implement a supertype method
以確保你正確重寫(xiě)onCreate方法(因?yàn)閛ncreate應(yīng)該為onCreate)。
而如果你不加@Override,則編譯器將不會(huì)檢測(cè)出錯(cuò)誤,而是會(huì)認(rèn)為你為子類(lèi)定義了一個(gè)新方法:oncreate
加不加@override有什么區(qū)別
1.簡(jiǎn)單來(lái)說(shuō)@override注解是告訴編譯器,下面的方法是重寫(xiě)父類(lèi)的方法
2.如果不寫(xiě)@override注解去直接重寫(xiě)方法,編譯器是不會(huì)判斷你是不是正確重寫(xiě)了父類(lèi)中的方法的。
如重寫(xiě)方法時(shí)參數(shù)與父類(lèi)不同,程序是不會(huì)提示報(bào)錯(cuò)的。這會(huì)留下一個(gè)潛在的bug。
當(dāng)你寫(xiě)了@override注解時(shí),程序會(huì)判斷你是否正確的重寫(xiě)了父類(lèi)的對(duì)應(yīng)方法。
而且加上此注解后,程序會(huì)自動(dòng)屏蔽父類(lèi)的方法。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java漢字轉(zhuǎn)拼音類(lèi)庫(kù)Pinyin4j詳細(xì)使用方法與實(shí)例
這篇文章主要介紹了Java漢字轉(zhuǎn)拼音類(lèi)庫(kù)Pinyin4j詳細(xì)使用方法與實(shí)例,需要的朋友可以參考下2020-02-02
springboot讀取.properties配置文件中的map和list類(lèi)型配置參數(shù)方式
這篇文章主要介紹了springboot讀取.properties配置文件中的map和list類(lèi)型配置參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03
使用BeanFactory實(shí)現(xiàn)創(chuàng)建對(duì)象
這篇文章主要為大家詳細(xì)介紹了使用BeanFactory實(shí)現(xiàn)創(chuàng)建對(duì)象,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08
java實(shí)現(xiàn)文件和base64相互轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了java如何實(shí)現(xiàn)文件和base64相互轉(zhuǎn)換,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11
基于spring boot實(shí)現(xiàn)一個(gè)全局異常處理器
在項(xiàng)目開(kāi)發(fā)中,我們可以基于spring boot提供的切面特性,來(lái)很輕松的實(shí)現(xiàn)全局異常的處理,所以本文主要為大家介紹了如何基于spring boot實(shí)現(xiàn)一個(gè)全局異常處理器,有需要的可以參考下2023-09-09

