淺談java中的重載和重寫的區(qū)別
1.重載
重載指在一個(gè)類中,具有多個(gè)相同名稱的方法,他們的參數(shù)列表卻不相同
(參數(shù)類型不同、參數(shù)個(gè)數(shù)不同甚至是參數(shù)順序不同)
重載對返回類型沒有要求,可以相同也可以不同,但是不能返回類型來判斷他們是否是重載。
例如
package HelloWorld; public class Zuoye { public static void main(String[] args) { Zuoye z = new Zuoye(); z.fangfa1(); z.fangfa1("張旭"); } public void fangfa1() { System.out.println("方法1"); } public void fangfa1(String name) { System.out.println("也是方法1,不過有參數(shù)"+ name); } }
小結(jié):
1.重載是一個(gè)類中多態(tài)性的一種表現(xiàn)
2.重載是在一個(gè)類中,具有相同名稱不同參數(shù)列表的方法
3.重載不能根據(jù)返回類型的相同或者不同來區(qū)分重載函數(shù)。
2.重寫
1.重寫是指在不同類中,將父類的方法在子類中重新寫一遍,子類繼承了父類原有的方法,但有時(shí)又不想繼承父類原有一模一樣的方法,所以就在返回類型,方法名,參數(shù)列表相同的情況下,對方法體進(jìn)行修改進(jìn)行重寫,這就是重寫。但注意的是 子類的訪問修飾符不能比父類的更嚴(yán)格(意思就是父類的訪問修飾符要更加 嚴(yán)謹(jǐn),權(quán)限更少,父親嚴(yán)格)
例如
package HelloWorld; public class Father { public static void main(String[] args) { Son s = new Son(); s.fangfa(); } public void fangfa() { System.out.println("我是爸爸的方法"); } } class Son extends Father { public void fangfa() { System.out.println("我是兒子的方法"); } }
返回結(jié)果是
小結(jié):
1. 發(fā)生在父類和子類關(guān)系之間
2. 他們的返回類型,方法名,列表參數(shù)相同 方法體不同。
3.子類不能比父類更嚴(yán)格 ,(父親比兒子嚴(yán)格)。
4重寫方法一定不能拋出新的檢查異?;蛘弑缺恢貙懛椒ㄉ昝鞲訉挿旱臋z查型異常
private 最嚴(yán)格。
private
: 在同一類內(nèi)可見。使用對象:變量、方法。 注意:不能修飾類(外部類)
default
(即缺省,什么也不寫,不使用任何關(guān)鍵字): 在同一包內(nèi)可見,不使用任何修飾符。使用對象:類、接口、變量、方法。
protected
: 對同一包內(nèi)的類和所有子類可見。使用對象:變量、方法。 注意:不能修飾類(外部類)。
public
: 對所有類可見。使用對象:類、接口、變量、方法
總結(jié)重載和重寫的區(qū)別:
答:方法的重載和重寫都是實(shí)現(xiàn)多態(tài)的方式 ,區(qū)別在于重載實(shí)現(xiàn)的是編譯時(shí)的多態(tài)性,重寫實(shí)現(xiàn)的運(yùn)行時(shí)的多態(tài)性。
重載是在發(fā)生在同一個(gè)類中,他們有相同的方法名 ,但有不同的參數(shù)列表,重載對返回類型沒有特別要求,不能根據(jù)返回類型來進(jìn)行區(qū)分 。
而重寫發(fā)生在不同類中,發(fā)生在子類和父類之間的,重寫要求子類與父類的被重寫方法具有相同的返回類型,名稱和參數(shù)列表。 但他們的方法體要不同。 同時(shí),父類相較于子類,他的訪問修飾符會更加嚴(yán)格,即訪問范圍更小。比父類被重寫方法更好訪問,不能比父類被重寫方法聲明更多的異常(里氏代換原則) 。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Java高效提取PDF文件指定坐標(biāo)的文本內(nèi)容實(shí)戰(zhàn)代碼
在日常工作中,有時(shí)可能會需要從龐大的PDF文檔中提取其中所包含的文本內(nèi)容,下面這篇文章主要給大家介紹了關(guān)于如何利用Java高效提取PDF文件指定坐標(biāo)的文本內(nèi)容,需要的朋友可以參考下2024-01-01java通過控制鼠標(biāo)實(shí)現(xiàn)屏幕廣播的方法
這篇文章主要介紹了java通過控制鼠標(biāo)實(shí)現(xiàn)屏幕廣播的方法,針對前面一篇Java屏幕共享功能進(jìn)行了改進(jìn),實(shí)現(xiàn)了鼠標(biāo)控制功能,具有一定的實(shí)用價(jià)值,需要的朋友可以參考下2014-12-12java+sqlserver實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
這篇文章主要介紹了利用java和sqlserver實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),違章內(nèi)容主要建立了與sqlserver數(shù)據(jù)庫的連接開始展開內(nèi)容,能學(xué)到了解JDBC執(zhí)行SQL的語法,需要的朋友可以參考一下2021-12-12功能強(qiáng)大的TraceId?搭配?ELK使用詳解
這篇文章主要為大家介紹了功能強(qiáng)大的TraceId?搭配?ELK使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Spring Cloud Alibaba和Dubbo融合實(shí)現(xiàn)
這篇文章主要介紹了Spring Cloud Alibaba和Dubbo融合實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04JavaWeb中struts2實(shí)現(xiàn)文件上傳下載功能實(shí)例解析
這篇文章主要介紹了JavaWeb中struts2文件上傳下載功能的實(shí)現(xiàn),在Web應(yīng)用系統(tǒng)開發(fā)中,文件上傳和下載功能是非常常用的功能,需要的朋友可以參考下2016-05-05