java重寫(@Override)介紹以及舉例說明
1.概述
方法的重寫(override)是封裝的特性之一。在子類中可以根據(jù)需要對基類中繼承來的方法進(jìn)行重寫。重載和重寫沒有任何關(guān)系。
作用:通過重寫,子類既可以繼承父類的東西,又可以靈活的擴(kuò)充。
1.@override注解是告訴編譯器,下面的方法是重寫父類的方法
2.編譯器可以給你驗(yàn)證@Override下面的方法名是否是你父類中所有的,如果沒有則報(bào)錯(cuò)。例如,你如果沒寫@Override,而你下面的方法名又寫錯(cuò)了,這時(shí)你的編譯器是可以編譯通過的,因?yàn)榫幾g器以為這個(gè)方法是你的子類中自己增加的方法。
3.如果不寫@override注解去直接重寫方法,編譯器是不會(huì)判斷你是不是正確重寫了父類中的方法的。如重寫方法時(shí)參數(shù)與父類不同,程序是不會(huì)提示報(bào)錯(cuò)的。這會(huì)留下一個(gè)潛在的bug。當(dāng)你寫了@override注解時(shí),程序會(huì)判斷你是否正確的重寫了父類的對應(yīng)方法。而且加上此注解后,程序會(huì)自動(dòng)屏蔽父類的方法。
2.特點(diǎn)
在子類中可以根據(jù)需要對基類中繼承來的方法進(jìn)行重寫。
重寫方法必須和被重寫方法具有相同方法名稱、參數(shù)列表和返回值類型。
重寫方法不能使用比被重寫方法更嚴(yán)格的訪問權(quán)限。(由于多態(tài))
3.實(shí)例說明
代碼如下:
public class Animal { String name; void eat() { System.out.println("have a good dinner"); } public static void main(String[] args) { Birds b = new Birds(); b.eat(); } } class Birds extends Animal { @Override void eat() { super.eat(); // 調(diào)用父類的方法 System.out.println("----------------------------------------"); // 分隔線 System.out.println("jiujiujiu"); } void fly() { System.out.println("Yeah,I can fly~~"); } }
代碼說明:
鳥類Birds在eat的時(shí)候,需要輸出jiujiujiu??赏ㄟ^重寫父類Animal中的eat()方法實(shí)現(xiàn)。
通過Bird實(shí)例調(diào)用eat()方法時(shí),是調(diào)用重寫后的方法。
之前的父類的方法呢?其實(shí)還存在,可以在子類中通過super進(jìn)行調(diào)用。
運(yùn)行結(jié)果:
have a good dinner
----------------------------------------
jiujiujiu
附:加不加@override有什么區(qū)別
如果不寫@override注解去直接重寫方法,編譯器是不會(huì)判斷你是不是正確重寫了父類中的方法的。如重寫方法時(shí)參數(shù)與父類不同,程序是不會(huì)提示報(bào)錯(cuò)的。這會(huì)留下一個(gè)潛在的bug。當(dāng)你寫了@override注解時(shí),程序會(huì)判斷你是否正確的重寫了父類的對應(yīng)方法。而且加上此注解后,程序會(huì)自動(dòng)屏蔽父類的方法。
總結(jié)
到此這篇關(guān)于java重寫(@Override)介紹以及舉例說明的文章就介紹到這了,更多相關(guān)java重寫@Override內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用RocketMQTemplate發(fā)送帶tags的消息
這篇文章主要介紹了使用RocketMQTemplate發(fā)送帶tags的消息,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07Java垃圾回收機(jī)制的finalize方法實(shí)例分析
這篇文章主要介紹了Java垃圾回收機(jī)制的finalize方法,結(jié)合實(shí)例形式分析了finalize方法的特點(diǎn)及在垃圾回收機(jī)制中的相關(guān)操作技巧,需要的朋友可以參考下2019-08-08Java使用枚舉實(shí)現(xiàn)狀態(tài)機(jī)的方法詳解
這篇文章主要介紹了Java使用枚舉實(shí)現(xiàn)狀態(tài)機(jī)的方法詳解,枚舉類型很適合用來實(shí)現(xiàn)狀態(tài)機(jī),狀態(tài)機(jī)可以處于有限數(shù)量的特定狀態(tài),它們通常根據(jù)輸入,從一個(gè)狀態(tài)移動(dòng)到下一個(gè)狀態(tài),但同時(shí)也會(huì)存在瞬態(tài),需要的朋友可以參考下2023-11-11Java Validation Api實(shí)現(xiàn)原理解析
這篇文章主要介紹了Java Validation Api實(shí)現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09MyBatis中高級(jí)多表查詢(ResultMap、association、collection)詳解
文章主要介紹了MyBatis中高級(jí)多表查詢的四種方式:ResultMap、association、collection以及自連接查詢,通過定義接口的抽象方法、編寫mapper.xml和測試類,詳細(xì)展示了如何根據(jù)復(fù)雜數(shù)據(jù)結(jié)構(gòu)進(jìn)行數(shù)據(jù)的裝配和查詢,感興趣的朋友一起看看吧2024-11-11