1.重寫(xiě)(Override)
從字面上看,重寫(xiě)就是 重新寫(xiě)一遍的意思。其實(shí)就是在子類(lèi)中把父類(lèi)本身有的方法重新寫(xiě)一遍。子類(lèi)繼承了父類(lèi)原有的方法,但有時(shí)子類(lèi)并不想原封不動(dòng)的繼承父類(lèi)中的某個(gè)方法,所以在方法名,參數(shù)列表,返回類(lèi)型(除過(guò)子類(lèi)中方法的返回值是父類(lèi)中方法返回值的子類(lèi)時(shí))都相同的情況下, 對(duì)方法體進(jìn)行修改或重寫(xiě),這就是重寫(xiě)。但要注意子類(lèi)函數(shù)的訪問(wèn)修飾權(quán)限不能少于父類(lèi)的。
重寫(xiě) 總結(jié):
1.發(fā)生在父類(lèi)與子類(lèi)之間
2.方法名,參數(shù)列表,返回類(lèi)型(除過(guò)子類(lèi)中方法的返回類(lèi)型是父類(lèi)中返回類(lèi)型的子類(lèi))必須相同
3.訪問(wèn)修飾符的限制一定要大于被重寫(xiě)方法的訪問(wèn)修飾符(public>protected>default>private)
4.重寫(xiě)方法一定不能拋出新的檢查異常或者比被重寫(xiě)方法申明更加寬泛的檢查型異常
2.重載(Overload)
在一個(gè)類(lèi)中,同名的方法如果有不同的參數(shù)列表(參數(shù)類(lèi)型不同、參數(shù)個(gè)數(shù)不同甚至是參數(shù)順序不同)則視為重載。同時(shí),重載對(duì)返回類(lèi)型沒(méi)有要求,可以相同也可以不同,但不能通過(guò)返回類(lèi)型是否相同來(lái)判斷重載。
重載 總結(jié):
1.重載Overload是一個(gè)類(lèi)中多態(tài)性的一種表現(xiàn)
2.重載要求同名方法的參數(shù)列表不同(參數(shù)類(lèi)型,參數(shù)個(gè)數(shù)甚至是參數(shù)順序)
3.重載的時(shí)候,返回值類(lèi)型可以相同也可以不相同。無(wú)法以返回型別作為重載函數(shù)的區(qū)分標(biāo)準(zhǔn)
重載與重寫(xiě)的區(qū)別:
方法的重載和重寫(xiě)都是實(shí)現(xiàn)多態(tài)的方式,區(qū)別在于前者實(shí)現(xiàn)的是編譯時(shí)的多態(tài)性,而后者實(shí)現(xiàn)的是運(yùn)行時(shí)的多態(tài)性。重載發(fā)生在一個(gè)類(lèi)中,同名的方法如果有不同的參數(shù)列表(參數(shù)類(lèi)型不同、參數(shù)個(gè)數(shù)不同或者二者都不同)則視為重載;重寫(xiě)發(fā)生在子類(lèi)與父類(lèi)之間,重寫(xiě)要求子類(lèi)被重寫(xiě)方法與父類(lèi)被重寫(xiě)方法有相同的參數(shù)列表,有兼容的返回類(lèi)型,比父類(lèi)被重寫(xiě)方法更好訪問(wèn),不能比父類(lèi)被重寫(xiě)方法聲明更多的異常(里氏代換原則)。重載對(duì)返回類(lèi)型沒(méi)有特殊的要求,不能根據(jù)返回類(lèi)型進(jìn)行區(qū)分。