一、Java重寫(xiě)與重載的區(qū)別
1、含義不同
方法重寫(xiě)指的是在子類(lèi)中重新定義一個(gè)與父類(lèi)方法同名、參數(shù)列表相同的方法。子類(lèi)中的方法覆蓋了父類(lèi)中的同名方法,調(diào)用時(shí)會(huì)執(zhí)行子類(lèi)中的方法。方法重載指的是在同一個(gè)類(lèi)中定義多個(gè)方法,它們的方法名相同,但是參數(shù)列表不同。
2、參數(shù)列表不同
方法重載的參數(shù)列表必須不同,可以是參數(shù)類(lèi)型不同,參數(shù)個(gè)數(shù)不同或者參數(shù)順序不同。而方法重寫(xiě)的參數(shù)列表必須和父類(lèi)方法的參數(shù)列表完全一致,包括參數(shù)類(lèi)型、個(gè)數(shù)、順序等。
3、返回值限制不同
方法重載可以有不同的返回值類(lèi)型,但是不能只有返回值類(lèi)型不同,其余參數(shù)相同的方法。而方法重寫(xiě)必須和父類(lèi)方法具有相同的返回值類(lèi)型,或者是其子類(lèi)的返回值類(lèi)型。
4、方法調(diào)用不同
方法重載是在編譯時(shí)確定的,根據(jù)參數(shù)的不同,選擇不同的方法進(jìn)行調(diào)用。而方法重寫(xiě)是在運(yùn)行時(shí)確定的,當(dāng)父類(lèi)引用指向子類(lèi)對(duì)象時(shí),調(diào)用同名方法時(shí)會(huì)執(zhí)行子類(lèi)中的方法。
5、繼承關(guān)系不同
方法重載是在同一個(gè)類(lèi)中定義多個(gè)方法,它們是平級(jí)關(guān)系,沒(méi)有繼承關(guān)系。而方法重寫(xiě)是在子類(lèi)中對(duì)父類(lèi)方法進(jìn)行覆蓋,有繼承關(guān)系。
6、注解不同
方法重載可以使用相同或不同的注解進(jìn)行修飾,而方法重寫(xiě)必須使用@override注解,否則編譯器會(huì)發(fā)出警告。