我觀察到當我們從一個多態對象調用一個變量時,它調用父變量,但是當我們調用具有相同多態對象的方法時,它會調用子方法。爲什麼這是Java中多態的行爲?爲什麼Java不以相同的方式處理多態變量和方法?變量綁定VS多態中的方法綁定
class Parent{
int age =10;
public void showAge(){
System.out.println("Parent Age:"+age);
}
}
class ChildOne extends Parent{
int age = 20;
public void showAge(){
System.out.println("child one age:"+age);
}
}
class ChildTwo extends Parent{
int age = 30;
public void showAge(){
System.out.println("Child Two Age:"+age);
}
}
public class Test{
public static void main(String[] args) {
Parent parentChildOne = new ChildOne();
System.out.println("parentChildOne.age: "+parentChildOne.age);
parentChildOne.showAge();
Parent parentChildTwo = new ChildTwo();
System.out.println("parentChildTwo.age: "+parentChildTwo.age);
parentChildTwo.showAge();
}
}
這裏是輸出:
parentChildOne.age: 10
child one age:20
parentChildTwo.age: 10
Child Two Age:30
變量不是多態的。 – Keppil 2013-04-29 07:59:44
好的比較。我自己試了一下。假設超類和子類有一個名爲相同的實例字段 - var。然後投射物體將改變結果。 「((Superclass)subclassObj).var」給出超類的實例字段var。所以我認爲Java中的變量名稱是由引用類型解析的,而不是它們引用的實際obj類型。 – 2015-01-20 23:42:17
而方法名稱是動態綁定,它使用實際的obj類型。所以它就是多態。 – 2015-01-20 23:53:55