Java重寫(xiě)與重載之間的區(qū)別
重寫(xiě)(Override)
重寫(xiě)是子類(lèi)對(duì)父類(lèi)的允許訪問(wèn)的方法的實(shí)現(xiàn)過(guò)程進(jìn)行重新編寫(xiě), 返回值和形參都不能改變。即外殼不變,核心重寫(xiě)!
重寫(xiě)的好處在于子類(lèi)可以根據(jù)需要,定義特定于自己的行為。 也就是說(shuō)子類(lèi)能夠根據(jù)需要實(shí)現(xiàn)父類(lèi)的方法。
重寫(xiě)方法不能拋出新的檢查異?;蛘弑缺恢貙?xiě)方法申明更加寬泛的異常。例如: 父類(lèi)的一個(gè)方法申明了一個(gè)檢查異常 IOException,但是在重寫(xiě)這個(gè)方法的時(shí)候不能拋出 Exception 異常,因?yàn)?Exception 是 IOException 的父類(lèi),只能拋出 IOException 的子類(lèi)異常。
方法的重寫(xiě)規(guī)則
- 參數(shù)列表必須完全與被重寫(xiě)方法的相同;
- 返回類(lèi)型必須完全與被重寫(xiě)方法的返回類(lèi)型相同;
- 訪問(wèn)權(quán)限不能比父類(lèi)中被重寫(xiě)的方法的訪問(wèn)權(quán)限更低。例如:如果父類(lèi)的一個(gè)方法被聲明為public,那么在子類(lèi)中重寫(xiě)該方法就不能聲明為protected。
- 父類(lèi)的成員方法只能被它的子類(lèi)重寫(xiě)。
- 聲明為final的方法不能被重寫(xiě)。
- 聲明為static的方法不能被重寫(xiě),但是能夠被再次聲明。
- 子類(lèi)和父類(lèi)在同一個(gè)包中,那么子類(lèi)可以重寫(xiě)父類(lèi)所有方法,除了聲明為private和final的方法。
- 子類(lèi)和父類(lèi)不在同一個(gè)包中,那么子類(lèi)只能夠重寫(xiě)父類(lèi)的聲明為public和protected的非final方法。
- 重寫(xiě)的方法能夠拋出任何非強(qiáng)制異常,無(wú)論被重寫(xiě)的方法是否拋出異常。但是,重寫(xiě)的方法不能拋出新的強(qiáng)制性異常,或者比被重寫(xiě)方法聲明的更廣泛的強(qiáng)制性異常,反之則可以。
- 構(gòu)造方法不能被重寫(xiě)。
- 如果不能繼承一個(gè)方法,則不能重寫(xiě)這個(gè)方法。
重載(Overload)
重載(overloading) 是在一個(gè)類(lèi)里面,方法名字相同,而參數(shù)不同。返回類(lèi)型可以相同也可以不同。
每個(gè)重載的方法(或者構(gòu)造函數(shù))都必須有一個(gè)獨(dú)一無(wú)二的參數(shù)類(lèi)型列表。
只能重載構(gòu)造函數(shù)
重載規(guī)則
- 被重載的方法必須改變參數(shù)列表(參數(shù)個(gè)數(shù)或類(lèi)型或順序不一樣);
- 被重載的方法可以改變返回類(lèi)型;
- 被重載的方法可以改變?cè)L問(wèn)修飾符;
- 被重載的方法可以聲明新的或更廣的檢查異常;
- 方法能夠在同一個(gè)類(lèi)中或者在一個(gè)子類(lèi)中被重載。
- 無(wú)法以返回值類(lèi)型作為重載函數(shù)的區(qū)分標(biāo)準(zhǔn)
| 區(qū)別點(diǎn) | 重載方法 | 重寫(xiě)方法 |
|---|---|---|
| 參數(shù)列表 | 必須修改 | 一定不能修改 |
| 返回類(lèi)型 | 可以修改 | 一定不能修改 |
| 異常 | 可以修改 | 可以減少或刪除,一定不能拋出新的或者更廣的異常 |
| 訪問(wèn) | 可以修改 | 一定不能做更嚴(yán)格的限制(可以降低限制) |
總結(jié)
方法的重寫(xiě)(Overriding)和重載(Overloading)是java多態(tài)性的不同表現(xiàn),重寫(xiě)是父類(lèi)與子類(lèi)之間多態(tài)性的一種表現(xiàn),重載是一類(lèi)中多態(tài)性的一種表現(xiàn)。
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
Java中通過(guò)ZipOutputStream類(lèi)如何將多個(gè)文件打成zip
ZipOutputStream?是Java中用于創(chuàng)建ZIP文件的類(lèi),它是?java.util.zip?包中的一部分,通過(guò)使用?ZipOutputStream?,可以將多個(gè)文件壓縮到一個(gè)ZIP文件中,這篇文章主要介紹了Java中(ZipOutputStream)如何將多個(gè)文件打成zip,需要的朋友可以參考下2023-09-09
Spring?Cache?集成?Caffeine實(shí)現(xiàn)項(xiàng)目緩存的示例
本文主要介紹了Spring?Cache?集成?Caffeine實(shí)現(xiàn)項(xiàng)目緩存的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
詳解SpringBoot中時(shí)間類(lèi)型的序列化與反序列化
這篇文章主要為大家詳細(xì)介紹了SpringBoot中時(shí)間類(lèi)型的序列化與反序列化的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-02-02
Java對(duì)時(shí)間的簡(jiǎn)單操作實(shí)例
這篇文章主要介紹了Java對(duì)時(shí)間的簡(jiǎn)單操作,實(shí)例分析了針對(duì)java.util.Date的各類(lèi)常見(jiàn)操作,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-01-01
JavaWeb實(shí)現(xiàn)郵件發(fā)送功能
這篇文章主要為大家詳細(xì)介紹了JavaWeb實(shí)現(xiàn)郵件發(fā)送功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12
win10操作系統(tǒng)下重啟電腦java環(huán)境變量失效
這篇文章主要介紹了win10操作系統(tǒng)下重啟電腦java環(huán)境變量失效,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
解析Spring中@Controller@Service等線程安全問(wèn)題
這篇文章主要為大家介紹解析了Spring中@Controller@Service等線程的安全問(wèn)題,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03
詳解Spring Boot實(shí)戰(zhàn)之Restful API的構(gòu)建
這篇文章主要介紹了詳解Spring Boot實(shí)戰(zhàn)之Restful API的構(gòu)建,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01

