Java是一種支持多態性的編程語言。多態性意味著同一個方法名可以在不同的類中有不同的實現方式。Java中的多態性有兩種實現方式:重載和重寫。然而,有時候重載和重寫也會出現隱藏的情況。
重載是指在同一個類中使用相同的方法名,但是參數類型和數量不同。例如:
public void print(int x) { System.out.println("The integer value is " + x); } public void print(double x) { System.out.println("The double value is " + x); }
在上面的例子中,print()方法被重載了。當代碼中調用print()方法時,Java會根據傳入的參數類型和數量決定調用哪個方法。例如:
print(5); // 調用print(int x)方法 print(5.0); // 調用print(double x)方法
重寫是指在子類中重新定義與父類相同的方法名和參數。例如:
class Animal { public void talk() { System.out.println("Animal talks"); } } class Dog extends Animal { public void talk() { System.out.println("Dog barks"); } }
在上面的例子中,talk()方法被重寫了。當使用Dog類實例化對象并調用talk()方法時,輸出的結果為“Dog barks”而不是“Animal talks”。這是因為子類重新定義了父類的方法。
然而,當子類和父類同時定義了同名同參數的方法時,子類的方法會隱藏父類的方法,而不是重寫它。例如:
class Animal { public void talk() { System.out.println("Animal talks"); } } class Dog extends Animal { public void talk() { System.out.println("Dog barks"); } public static void main(String[] args) { Animal myDog = new Dog(); myDog.talk(); } }
在上面的例子中,Dog類的talk()方法隱藏了Animal類的talk()方法。當使用myDog對象調用talk()方法時,輸出的結果為“Dog barks”而不是“Animal talks”。