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