Java中對于父類和子類中同名方法的重載機制,會產生兩種不同的實現方式:隱藏和覆蓋。盡管兩種實現方式的現象類似,但是它們背后的邏輯機制是不一樣的。
public class Parent { public void hello() { System.out.println("Hello from Parent!"); } } public class Child extends Parent { public void hello() { System.out.println("Hello from Child!"); } }
在這個例子中,父類Parent中定義了一個hello方法,子類Child中也定義了一個同名的hello方法,在子類中的定義會覆蓋掉父類中的同名方法。在調用時,實際上調用的是具體對象類型的版本,如果是Child類型的對象,就調用Child中的hello方法,如果是Parent類型的對象,就調用Parent中的hello方法。
覆蓋的本質是多態,是運行時決定具體調用哪個方法的。如果子類重寫了父類的方法,那么子類對象的引用調用該方法時就會調用子類中的實現,而不是父類中的實現,這就是覆蓋。
public class Main { public static void main(String[] args) { Parent parent = new Parent(); Child child = new Child(); parent.hello(); // 輸出:Hello from Parent! child.hello(); // 輸出:Hello from Child! Parent parent2 = new Child(); parent2.hello(); // 輸出:Hello from Child! } }
從上面的代碼可以看到,當我們將Child類型的對象賦值給Parent類型的引用parent2時,雖然我們用的是Parent類型的引用來調用hello方法,但是實際上調用的是Child類中的hello方法,這就是Java中的多態機制。
上一篇css表示顏色值的方式
下一篇css被稱為什么意思