java子類轉父類后調用誰的方法(同名時)
以前一直以為子類轉父類后,就會調用父類的方法了。其實不是,依舊是子類的方法。
class Child extends Parent{
public void show() {
System.out.println("I am child");
}
}
class Parent {
public void show() {
System.out.println("I am parent");
}
}
public class HelloWorld {
public static void main(String[] args) {
Child c = new Child();
Parent p = c;
p.show();
}
}
上面這個程序,創建一個Child實例,然后轉成父類型,調用show(),會發現調用的還是子類行的show()。
打印輸出:
I am child
不僅如此,如果子類調用了繼承的父類函數,而這個父類函數里又調用了一個同名函數,那么調用的仍舊是子類所重寫的函數。
class Child extends Parent{ public void foo() { System.out.println("foo, I am child"); } } class Parent {
public void show() { System.out.println("I am child"); }
public void foo() { System.out.println("foo, I am Parent"); } } public class HelloWorld { public static void main(String[] args) { Child c = new Child(); Parent p = c; p.show(); } }
這個例子增加了一個foo方法被show()間接調用,同時刪除了子類的show()來強制調用父類的show(),結果證明,父類show仍舊調用子類的foo().
I am parent
foo, I am child
看來只要對象是子類,那它所調用(以及間接調用)的方法都會優先選擇屬于它的同名子類方法,無視類型轉換。

浙公網安備 33010602011771號