在Java中,方法可以使用重載和覆蓋的技術(shù)。重載是指在同一個(gè)類中定義多個(gè)方法,這些方法的名字相同,但它們的參數(shù)類型或個(gè)數(shù)不同。覆蓋是指子類中的方法與父類中的方法具有相同的方法名、參數(shù)個(gè)數(shù)和參數(shù)類型,并且子類的方法返回值類型和訪問(wèn)修飾符等與父類的方法相同。
下面分別舉個(gè)例子來(lái)說(shuō)明重載和覆蓋:
public class OverloadTest{ public int add(int x, int y){ return x + y; } public double add(double x, double y){ return x + y; } public static void main(String args[]){ OverloadTest obj = new OverloadTest(); int sum1 = obj.add(10, 20); double sum2 = obj.add(3.4, 2.2); System.out.println("sum1: "+sum1); System.out.println("sum2: "+sum2); } }
在上面的例子中,我們定義了一個(gè)類 OverloadTest,并且在其中定義了兩個(gè)同名方法 add()。傳入這兩個(gè)方法的參數(shù)類型不同(一個(gè)是 int,一個(gè)是 double),因此編譯器能夠判斷到底調(diào)用哪個(gè)方法。
class Animal{ public void move(){ System.out.println("動(dòng)物可以移動(dòng)"); } } class Dog extends Animal{ public void move(){ super.move(); // 調(diào)用父類的方法 System.out.println("狗可以跑和走"); } } public class TestDog{ public static void main(String args[]){ Animal a = new Animal(); // Animal 對(duì)象 Animal b = new Dog(); // Dog 對(duì)象 a.move(); // 執(zhí)行 Animal 類的方法 b.move(); // 執(zhí)行 Dog 類的方法 } }
上面的代碼演示了覆蓋,其中類 Animal 定義了一個(gè)move()方法,而類 Dog 也定義了 move() 方法并且覆蓋了父類的 move() 方法。注意到在 Dog 類的 move() 方法中,我們調(diào)用了 super.move() 以便能夠調(diào)用到父類的方法實(shí)現(xiàn)。
在實(shí)際開(kāi)發(fā)中,重載和覆蓋都是非常常用的技術(shù)。使用這兩種技術(shù)可以寫出更加靈活和可讀性更高的代碼,并且能夠更好地實(shí)現(xiàn)程序的擴(kuò)展和維護(hù)。