在Java編程中,有兩個概念經常被混淆,它們分別是方法覆蓋重寫和方法重載。
方法覆蓋重寫就是在子類中重新定義一個與父類中同名、參數相同以及返回值相同的方法。這樣當使用子類對象調用這個方法時,就會執行子類中的方法而不是父類中的方法。需要注意的是,子類中方法的訪問修飾符不能低于父類中方法的訪問修飾符,并且子類中的方法不能拋出比父類中方法更多的異常。下面是一個例子:
// 父類 class Parent { public void foo() { System.out.println("Parent.foo()"); } } // 子類 class Child extends Parent { public void foo() { System.out.println("Child.foo()"); } } // 測試代碼 Parent parent = new Parent(); parent.foo(); // 執行 Parent.foo() Child child = new Child(); child.foo(); // 執行 Child.foo() Parent childParent = new Child(); childParent.foo(); // 執行 Child.foo()
方法重載則是在同一個類中定義一個以上的方法,它們具有相同的名稱但參數列表不同,返回值可以相同也可以不同。當使用這些方法時,會根據傳入的參數來選擇調用哪一個方法。下面是一個例子:
class MyClass { public void print(int i) { System.out.println("print(int)"); } public void print(String s) { System.out.println("print(String)"); } } // 測試代碼 MyClass myClass = new MyClass(); myClass.print(1); // 執行 print(int) myClass.print("hello"); // 執行 print(String)
總的來說,方法覆蓋重寫是在子類中重新定義同名、參數相同以及返回值相同的方法,而方法重載是在同一個類中定義名稱相同但參數列表不同的方法。理解這些概念對于編寫Java程序非常重要。