概念
- 重寫:又稱覆蓋,是子類繼承父類的屬性和方法后攀唯,因子類的方法可能會因子類自身特點而特殊化蟀悦,但又是子類所必須具有的方法媚朦,因此通過子類繼承父類后,重新寫一個新的方法日戈,來達到覆蓋原有父類方法的目的询张。
- 重載:在同一個類中,允許存在一個或一個以上的同名函數(shù)浙炼,只要參數(shù)類型或參數(shù)個數(shù)不同即可份氧。
特點
- 重寫:當(dāng)子類出現(xiàn)和父類一模一樣的方法(函數(shù))時,當(dāng)子類對象調(diào)用該方法弯屈,會運行子類的方法蜗帜,就像父類的方法被覆蓋一樣
- 重載:僅僅同名函數(shù),參數(shù)列表不同季俩,返回值不必一樣
目的
- 重寫:便于后期功能更新及維護钮糖,不必修改父類函數(shù),在子類中就可以通過覆蓋更新酌住,提高了代碼的拓展性店归。
- 重載:方便閱讀,優(yōu)化了程序設(shè)計
注意點
-
重寫:
(1)子類覆蓋父類時酪我,必須保證權(quán)限比父類大或相等消痛,否則編譯失敗。如public>protected(默認(rèn)狀態(tài))>private
但當(dāng)父類方法權(quán)限是private時都哭,就算子類方法權(quán)限大于父類秩伞,由于父類私有方法不可被繼承,所以子類就算有一個一模一樣的方法欺矫,也不能成為覆蓋纱新,但是編譯可以通過
特殊非覆蓋例子
(2)靜態(tài)只能覆蓋靜態(tài),不能覆蓋非靜態(tài)穆趴,因為在加載類的時候自動加載靜態(tài)方法脸爱,優(yōu)先于實例化后才可以加載的非靜態(tài)方法。
- 重載:以下情況不屬于重載
void show(int a,int b)
double show(int c,char d)//不屬于重載未妹,這兩種不允許出現(xiàn)在同一個類中簿废,虛擬機會不知道該運行哪一個
例子
重寫
-
保留父類原有功能定義空入,并結(jié)合super.函數(shù)的方式升級原有功能super重寫
重載
-
定義的功能相同,但運算的內(nèi)容不同時族檬,因此定義一個相同名字的功能來表示如下例中的add歪赢,通過參數(shù)列表的不同來區(qū)分多個同名函數(shù)add
改良后,減少代碼的復(fù)用性
add改良版