當(dāng)子類需要父類的功能,而子類有新的內(nèi)容,可以重寫父類中的方法。在實(shí)際開發(fā)過(guò)程中,隨著代碼量的逐漸增加,維護(hù)成了一個(gè)很大的問(wèn)題,如果需要對(duì)某個(gè)方法進(jìn)行修改,其本身代碼以及其子類代碼都會(huì)受到影響,而重寫則很好的解決了這個(gè)問(wèn)題。
方法重寫又稱為方法覆蓋、方法復(fù)寫。 (推薦學(xué)習(xí):java課程)
重寫是子類對(duì)父類的允許訪問(wèn)的方法的實(shí)現(xiàn)過(guò)程進(jìn)行重新編寫, 返回值和形參都不能改變。
方法重寫特點(diǎn)
在子類和父類中,出現(xiàn)了方法聲明相同的情況
子類的方法聲明要和父類相同
子類要重寫的方法,方法的權(quán)限修飾符不能比父類更低(public 、protected 、default 、private 權(quán)限依次增加)
父類私有的方法,子類不能進(jìn)行方法重寫
代碼實(shí)例
先創(chuàng)建Person.java父類
package Rewrite; public class Person { public void eat() { System.out.println("吃飯!"); } public void work() { System.out.println("工作!"); } public void sleep() { System.out.println("睡覺(jué)!"); } }
再創(chuàng)建Student.java子類
package Rewrite; /* Student子類繼承Person父類,并對(duì)父類的work()方法進(jìn)行重寫 */ public class Student extends Person { public void work() { super.work(); //使用super關(guān)鍵字調(diào)用父類方法 System.out.println("學(xué)習(xí)!"); System.out.println("娛樂(lè)!"); } }
在Main.java中調(diào)用
package Rewrite; public class Main { public static void main(String[] args) { Person per = new Person(); //創(chuàng)建父類對(duì)象 per.eat(); per.work(); per.sleep(); Student stu = new Student(); //創(chuàng)建子類對(duì)象 stu.work(); } }
實(shí)例分析:
在Person父類中定義了三個(gè)方法,在子類中對(duì)work()方法進(jìn)行重寫
重寫時(shí)函數(shù)的返回值類型、函數(shù)名、參數(shù)列表都一樣
在子類中可以使用super關(guān)鍵字調(diào)用父類方法