在Java編程中,覆蓋和重寫這兩個概念常常被混淆。雖然它們很相似,但事實上有很大的區(qū)別。
覆蓋通常指的是子類對父類中的方法進行覆蓋,即該方法在子類中有一個與父類方法名稱、簽名和返回類型完全相同的實現(xiàn)。這通常用于希望修改或擴展父類方法行為的場景。在Java中,使用@Override注解可以標(biāo)識在方法上,以表示該方法覆蓋了父類方法。
public class Parent{ public void doSth(){ System.out.println("Parent does something"); } } public class Child extends Parent{ @Override public void doSth(){ System.out.println("Child does something"); } }
重寫則指的是子類對繼承得到父類中的方法進行重新實現(xiàn)。這通常用于子類希望利用繼承獲得父類行為的同時,根據(jù)自身需要進行修改或擴展的場景。因此,重寫的方法通常具有與父類方法名稱、簽名和返回類型相同的實現(xiàn),但也可以有不同的形式參數(shù)、修飾符或拋出異常。
public class Parent{ public void doSth(int num){ System.out.println("Parent does something with " + num); } } public class Child extends Parent{ @Override public void doSth(int num){ System.out.println("Child does something with " + num); } public void doSth(String str){ System.out.println("Child does something with " + str); } }
綜上所述,覆蓋和重寫的區(qū)別在于它們的目的不同。覆蓋是為了修改或擴展父類的行為,而重寫是繼承并利用父類的行為,同時根據(jù)自身需要進行修改或擴展。此外,如果子類方法的實現(xiàn)未與父類方法名稱、簽名和返回類型完全相同,則不算是覆蓋或重寫,而是重載。