下面是范文網(wǎng)小編收集的方法重載與覆蓋的區(qū)別3篇,以供參考。
方法重載與覆蓋的區(qū)別1
一、方法重寫(0veriding)
在Java程序中,類的繼承關(guān)系可以產(chǎn)生一個子類,子類繼承父類,它具備了父類所有的特征,繼承了父類所有的方法和變量。
子類可以定義新的特征,當(dāng)子類需要修改父類的一些方法進(jìn)行擴(kuò)展,增大功能,程序設(shè)計者常常把這樣的一種操作方法稱為重寫,也叫稱為覆寫或覆蓋。
重寫體現(xiàn)了Java優(yōu)越性,重寫是建立在繼承關(guān)系上,它使語言結(jié)構(gòu)更加豐富。在Java中的繼承中,子類既可以隱藏和訪問父類的方法,也可以覆蓋繼承父類的方法。
在Java中覆蓋繼承父類的方法就是通過方法的重寫來實現(xiàn)的。所謂方法的重寫是指子類中的方法與父類中繼承的方法有完全相同的返回值類型、方法名、參數(shù)個數(shù)以及參數(shù)類型。
這樣,就可以實現(xiàn)對父類方法的覆蓋。如果子類將父類中的方法重寫了,調(diào)用的時候肯定是調(diào)用被重寫過的方法,那么如果現(xiàn)在一定要調(diào)用父類中的方法該怎么辦呢?
此時,通過使用super關(guān)鍵就可以實現(xiàn)這個功能,super關(guān)鍵字可以從子類訪問父類中的內(nèi)容,如果要訪問被重寫過的方法,使用“super.方法名(參數(shù)列表)”的形式調(diào)用。
如果要使用super關(guān)鍵字不一定非要在方法重寫之后使用,也可以明確地表示某個方法是從父類中繼承而來的。使用super只是更加明確的說,要從父類中查找,就不在子類查找了。
二、重寫規(guī)則
在重寫方法時,需要遵循以下的規(guī)則:
(一) 父類方法的參數(shù)列表必須完全與被子類重寫的方法的參數(shù)列表相同,否則不能稱其為重寫而是重載。
(二) 父類的返回類型必須與被子類重寫的方法返回類型相同,否則不能稱其為重寫而是重載。..
(三) Java中規(guī)定,被子類重寫的方法不能擁有比父類方法更加嚴(yán)格的訪問權(quán)限。編寫過Java程序的人就知道,
父類中的方法并不是在任何情況下都可以重寫的,當(dāng)父類中方法的訪問權(quán)限修飾符為private時,該方法只能被自己的類訪問,
不能被外部的類訪問,在子類是不能被重寫的。如果定義父類的方法為public,在子類定義為private,程序運行時就會報錯。
(四) 由于父類的訪問權(quán)限修飾符的限制一定要大于被子類重寫方法的訪問權(quán)限修飾符,而private權(quán)限最小。
所以如果某一個方法在父類中的訪問權(quán)限是private,那么就不能在子類中對其進(jìn)行重寫。如果重新定義,也只是定義了一個新的方法,不會達(dá)到重寫的效果。
(五) 在繼承過程中如果父類當(dāng)中的方法拋出異常,那么在子類中重寫父類的該方法時,也要拋出異常,
而且拋出的異常不能多于父類中拋出的異常(可以等于父類中拋出的異常)。換句話說,重寫方法一定不能拋出新的檢查異常,
或者比被重寫方法聲明更加寬泛的檢查型異常。例如,父類的一個方法申明了一個檢查異常IOException,在重寫這個方法時就不能拋出Exception,
只能拋出IOException的子類異常,可以拋出非檢查異常。同樣的道理,如果子類中創(chuàng)建了一個成員變量,
而該變量和父類中的一個變量名稱相同,稱作變量重寫或?qū)傩愿采w。但是此概念一般很少有人去研究它,因為意義不大。
三、方法重載(Overloading)
方法重載是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的一種手段。調(diào)用方法時通過傳遞給它們的不同個數(shù)和類型的參數(shù)來決定具體使用哪個方法,這就是多態(tài)性。
所謂方法重載是指在一個類中,多個方法的方法名相同,但是參數(shù)列表不同。參數(shù)列表不同指的`是參數(shù)個數(shù)、參數(shù)類型或者參數(shù)的順序不同。
方法的重載在實際應(yīng)用中也會經(jīng)常用到。不僅是一般的方法,構(gòu)造方法也可以重載。
在方法重載時,方法之間需要存在一定的聯(lián)系,因為這樣可以提高程序的可讀性,一般只重載功能相似的方法。
重載是指我們可以定義一些名稱相同的方法,通過定義不同的參數(shù)來區(qū)分這些方法,然后再調(diào)用時,Java虛擬機(jī)就會根據(jù)不同的參數(shù)列表來選擇合適的方法執(zhí)行。也就是說,當(dāng)一個重載方法被調(diào)用時,Java用參數(shù)的類型或個數(shù)來決定實際調(diào)用的重載方法。因此,每個重載方法的參數(shù)的類型或個數(shù)必須是不同。
雖然每個重載方法可以有不同的返回類型,但返回類型并不足以區(qū)分所使用的是哪個方法。
當(dāng)Java調(diào)用一個重載方法是,參數(shù)與調(diào)用參數(shù)匹配的方法被執(zhí)行。在使用重載要注意以下的幾點:
1.在使用重載時只能通過不同的參數(shù)列表,必須具有不同的參數(shù)列表。
2.不能通過訪問權(quán)限、返回類型、拋出的異常進(jìn)行重載。
3.方法的異常類型和數(shù)目不會對重載造成影響。
4.可以有不同的返回類型,只要參數(shù)列表不同就可以了。
5.可以有不同的訪問修飾符。
6.可以拋出不同的異常。
四、方法重寫與方法重載的區(qū)別
方法重寫(方法覆蓋)
概念:子類繼承父類中的方法,想在原有的基礎(chǔ)上作一定的修改。
格式特點:
1.方法名、參數(shù)列表必須完全一致
2.返回類型可以相同,也可以不同,不同必須是原來返回類型的子類型(可隱式轉(zhuǎn)換即可)JAVA近期版本的新特性,在之前子類返回值類型必須和父類返回值類型保持一致
2.子類拋出的異常下不能超過父類相應(yīng)方法拋出的異常(子類異常不能大于父類異常)
3.子類方法的訪問級別不能低于父類相應(yīng)方法的訪問級別(子類訪問級別不能低于父類訪問級別)
方法重載
概念:在同一個類中,允許存在一個以上的同名函數(shù),只要它們的參數(shù)個數(shù)或者參數(shù)類型不同即可。
格式特點:
1.方法名相同。
2.方法的參數(shù)表必須不同
如果參數(shù)個數(shù)不同,就不管它的參數(shù)類型了!
如果參數(shù)個數(shù)相同,那么參數(shù)的類型必須不同。
3.方法的返回類型、修飾符可以相同,也可不同。
方法重載與覆蓋的區(qū)別2
一、重載和覆蓋
多態(tài)性也是面向?qū)ο蠓椒ǖ囊粋€重要特性。多態(tài)性是指在在程序中出現(xiàn)的"重名"現(xiàn)象,即在一個程序中相同的名字可以表示不同的實現(xiàn)。
在JAVA中,多態(tài)性主要表現(xiàn)在如下兩個方面:
?。?)方法重載。通常指在同一個類中,相同的方法名對應(yīng)著不同的方法實現(xiàn),但是方法的參數(shù)不同。
?。?)成員覆蓋。通常指在不同類(父類和子類)中,允許有相同的變量名,但是數(shù)據(jù)類型不同;也允許有相同的方法名,但是對應(yīng)的方法實現(xiàn)不同。
在重載的情況下,同一類中具有相同的名字的方法。如何選擇它的方法體呢?不能使用類名來區(qū)分,通常采用不同的方法形參表,區(qū)分重載要求形參在類型,個數(shù)和順序的不同,在定義重載方法時,應(yīng)在方法的形參的類型,個數(shù)和順序有所不同,以便在選擇時能夠區(qū)別開來。
在覆蓋的'情況下,同名的方法存在于不同的類中,在調(diào)用方法只要指明其方法所歸屬的類名就可以了。
二、重載和覆蓋的區(qū)別
在同一個類中方法成員的名稱相同,但參數(shù)的類型和個數(shù)不同,這稱為重載。
在存在繼承關(guān)系的兩個話,子類與父類的方法成員名稱相同、參數(shù)的類型和個數(shù)相同的話,子類的方法覆蓋父類的方法,這稱為覆蓋。
方法重載與覆蓋的區(qū)別3
方法重載(Overload)是指在一個java類的定義中,可以定義多個相同名字的方法,那么只需要這些方法的參數(shù)不同就可以,這個就叫做方法重載。
方法重載概括成一句話就是同名不同參。同名是指方法名相同,不同參是指參數(shù)個數(shù)不同,參數(shù)的類型不同(其中在參數(shù)類型不同時,參數(shù)的順序不同也可以),
方法重載只和方法名和方法參數(shù)有關(guān),和方法的參數(shù)名字以及方法的返回值無關(guān),
其中方法的參數(shù)名字以及方法的返回值與方法重載無關(guān)。
方法重寫(Override)是指在子類中定義了一個方法,并且這個方法的返回類型,方法名以及方法參數(shù)類型,參數(shù)個數(shù)與從父類繼承過來的方法完全相同,那么我們就說子類這個方法重寫了父類的方法。
其中子類的'訪問修飾符在重寫這個方法時候不能必須大于或等于父類的訪問修飾符。
如果父類的方法有異常聲明,那么子類中聲明拋出異常類型不能比父類的范圍廣。
子類一旦重寫了父類的方法,就會將父類的這個方法隱藏或覆蓋,如果子類對象調(diào)用這個方法,調(diào)用的是重寫后的方法。那么想調(diào)用這個隱藏方法怎么辦呢?java中提供了super關(guān)鍵字來實現(xiàn)。
通過上面對它們定義以及特點的理解,下面再來總結(jié)它們之間的區(qū)別。
1.方法重載是發(fā)生一個類當(dāng)中,而方法重寫是發(fā)生在子類和父類之間,是在繼承下面發(fā)生的。
2.方法重載能夠改變方法的返回值,而方法重寫不可以。
3.方法重載和方法重寫都是java多態(tài)的一種體現(xiàn),區(qū)別在于方法重載是編譯時的多態(tài),而方法重寫則是運行時的多態(tài)。
方法重載與覆蓋的區(qū)別3篇相關(guān)文章:
★ 最新選擇床褥的方法推薦床褥和床墊的區(qū)別3篇(床褥床墊和床褥的區(qū)別是什么)
★ 飼養(yǎng)珍珠龜?shù)姆椒ㄕ渲辇敽筒蔟數(shù)膮^(qū)別2篇 珍珠龜與草龜?shù)膮^(qū)別