在Java中,覆蓋(Override)和重載(Overload)是兩個非常常用的概念。它們旨在提高代碼的復用性和可讀性,讓程序更加高效且易于維護。
覆蓋是指子類重新定義了父類中的方法,以實現自己的行為方式。Java中的覆蓋需要滿足以下條件:
1.方法名一致; 2.參數列表一致; 3.返回值類型兼容; 4.訪問修飾符權限不能少于父類方法; 5.拋出的異常不能多于父類方法。
覆蓋是實現多態的重要手段,讓我們能夠在編寫代碼的時候根據不同的對象和上下文環境,調用不同的方法,實現更高效的程序。例如:
class Animal { void speak() { System.out.println("Animal speaks."); } } class Dog extends Animal { void speak() { System.out.println("Dog barks."); } } public class Test { public static void main(String[] args) { Animal a = new Animal(); Dog d = new Dog(); a.speak(); // Animal speaks. d.speak(); // Dog barks. } }
在上面的例子中,由于Dog類重寫了Animal類的speak()方法,當我們調用d.speak()時,實際調用的是Dog類的方法,輸出Dog barks.而不是Animal speaks.。
重載是指在同一個類中定義了多個方法,它們擁有相同的名字但是不同的參數列表。Java中的重載需要滿足以下條件:
1.方法名相同; 2.參數列表不同; 3.重載方法的返回值可以不同; 4.訪問修飾符權限不能少于父類方法; 5.拋出的異常不能多于父類方法。
重載允許我們使用相同的方法名來實現各種不同的行為,以達到代碼復用的目的。例如:
class Calculation { int add(int a, int b) { return a + b; } int add(int a, int b, int c) { return a + b + c; } double add(double a, double b) { return a + b; } } public class Test { public static void main(String[] args) { Calculation c = new Calculation(); int sum1 = c.add(1, 2); int sum2 = c.add(1, 2, 3); double sum3 = c.add(1.2, 2.3); System.out.println("sum1 = " + sum1 + ", sum2 = " + sum2 + ", sum3 = " + sum3); } }
在上面的例子中,我們定義了三個add()方法。當我們調用c.add(1, 2)時,實際調用的是第一個add()方法;調用c.add(1, 2, 3)時,實際調用的是第二個add()方法;調用c.add(1.2, 2.3)時,實際調用的是第三個add()方法。這樣我們就可以使用同一個方法名來完成不同的任務,避免了代碼的重復。