在Java中,重寫(override)和重載(overload)是兩個(gè)常見的概念,它們都是實(shí)現(xiàn)多態(tài)的方式。但是,它們之間有幾個(gè)重要的區(qū)別。
首先,重載指的是在同一類中定義了多個(gè)方法,它們的方法名稱相同,但是參數(shù)列表不同。示例代碼如下:
public class Calculator { public int add(int x, int y) { return x + y; } public int add(int x, int y, int z) { return x + y + z; } }
在上面的代碼中,我們定義了兩個(gè)add方法,一個(gè)需要兩個(gè)參數(shù),一個(gè)需要三個(gè)參數(shù)。雖然它們都叫add,但是Java根據(jù)參數(shù)的類型和數(shù)量,通過重載機(jī)制區(qū)分了它們。
與此不同的是,重寫(override)指的是子類重寫父類中的方法,使得子類的方法和父類方法具有相同的名稱和參數(shù)列表。示例代碼如下:
public class Animal { public void move() { System.out.println("Animal can move!"); } } public class Dog extends Animal { public void move() { System.out.println("Dog can run and walk!"); } }
在上面的代碼中,子類Dog重寫了父類Animal中的move方法。當(dāng)我們?cè)诔绦蛑袆?chuàng)建Dog對(duì)象,并調(diào)用move方法時(shí),實(shí)際調(diào)用的是Dog類中的move方法。這就體現(xiàn)了子類的多態(tài)性。
總體來說,重載是根據(jù)參數(shù)列表區(qū)分方法的不同版本,而重寫是子類覆蓋了父類的方法。兩者都是多態(tài)性的表現(xiàn)形式,但是各自的實(shí)現(xiàn)方式是不同的。