在Java中,方法重寫和方法重載是兩個非常基礎的概念。雖然兩者都是在同一個類中定義方法,但是它們是有區別的。
首先,讓我們從方法重載開始說起。方法重載是指在同一個類中定義多個具有相同名稱但參數列表不同的方法。參數列表包括參數的類型、數量、順序,但不包括方法的返回值類型。例如:
public class Test { public void hello() { System.out.println("Hello World!"); } public void hello(String name) { System.out.println("Hello " + name + "!"); } public void hello(String name, String gender) { System.out.println("Hello " + gender + " " + name + "!"); } }
在上面的例子中,我們定義了一個Test類,并且在這個類中定義了三個hello方法。這三個方法都有相同的名稱hello,但是參數列表不同。因此,我們可以在不同的情況下調用不同的hello方法。例如:
Test t = new Test(); t.hello(); // 輸出:Hello World! t.hello("Alice"); // 輸出:Hello Alice! t.hello("Bob", "Mr."); // 輸出:Hello Mr. Bob!
接下來,我們來看一下方法重寫。方法重寫是指在子類中定義一個與父類中聲明的方法具有相同名稱、參數列表和返回類型的方法,這種情況下,子類中的方法將覆蓋父類中的方法。例如:
public class Animal { public void move() { System.out.println("Animal is moving."); } } public class Cat extends Animal { public void move() { System.out.println("Cat is moving."); } } public class Dog extends Animal { public void move() { System.out.println("Dog is moving."); } } public class Test { public static void main(String[] args) { Animal a1 = new Cat(); Animal a2 = new Dog(); a1.move(); // 輸出:Cat is moving. a2.move(); // 輸出:Dog is moving. } }
在上面的例子中,我們定義了一個Animal類,并且在這個類中定義了一個move方法。然后我們定義了兩個子類Cat和Dog,它們都繼承自Animal類,并且重寫了move方法。在Test類中,我們定義了兩個Animal類型的變量a1和a2,并且分別實例化為Cat和Dog的對象。當我們調用a1.move()和a2.move()時,分別輸出Cat is moving.和Dog is moving.。這是因為我們在子類中重寫了父類的move方法,所以當我們調用a1.move()和a2.move()時,分別調用的是Cat和Dog類中的move方法。
綜上,我們可以看出,方法重載和方法重寫雖然都涉及到方法名稱和參數,但是它們的區別在于方法重載只是參數列表不同,而方法重寫是完全覆蓋了父類方法。掌握這兩個概念對于理解Java中的類和對象是非常重要的。