Java作為一種面向對象的編程語言,有兩個非常重要的概念:覆蓋和重載。這兩個概念常常被程序員混淆,因此有必要進行一些解釋。
覆蓋(Override)指的是,在父類中已經有了一個方法,而子類想要對這個方法進行改進。這時候子類就可以在自己的類中重新定義這個方法,方法名、形參數量、形參類型和返回類型必須與父類中的方法完全相同,這樣就實現了方法的覆蓋。
class A { public void foo(String str) { System.out.println("A: " + str); } } class B extends A { public void foo(String str) { System.out.println("B: " + str); } }
在上述代碼中,類B繼承自類A,同時覆蓋了A類中的foo方法。當創建對象并調用foo方法時,如果是A的對象,輸出的內容就是“A: str”,如果是B的對象,輸出的內容就是“B: str”。
重載(Overload)指的是,在一個類中,出現了兩個方法的名稱相同,但參數個數或類型不同的情況。這樣就實現了方法的重載。
class C { public void bar() { System.out.println("Hello, world!"); } public void bar(String str) { System.out.println("Hello, " + str + "!"); } }
在上述代碼中,類C中定義了兩個名稱相同但參數不同的方法bar。當不給bar方法傳遞參數時,調用的是第一個方法,輸出的內容是“Hello, world!”;當給bar方法傳遞一個字符串參數時,調用的是第二個方法,輸出的內容是“Hello, str!”。
總的來說,Java的覆蓋和重載使得程序員可以更加靈活地設計代碼,根據不同的需求來選擇不同的方法。