按:我感受我出了一個還不錯的面試題~java
代碼以下:面試
SuperClass.javaide
public class SuperClass { int a = 3; public int getA() { return a; } }
SubClass.java.net
public class SubClass extends SuperClass{ int a = 4; @Override public int getA() { return a; } }
Client.javacode
public class Client { public static void main(String[] args) { SuperClass s = new SubClass(); //!!! s 的編譯時類型是 SuperClass, 運行時類型是 SubClass System.out.println(s.a); // 3 System.out.println(s.getA()); // 4 System.out.println(s.a != s.getA()); // true } }
Client
的幾個輸出語句的輸出結果寫在代碼註釋中了。其中,須要特別注意的是: s.a != s.getA()
是 true
! 這個初看有點讓人不解,s.a
怎麼會不等於自身?(I'm not me?) 出現這個狀況,正是**多態(Polymorphism)**的限定所決定的:對象
s.getA()
訪問的是子類 SubClass
的方法 getA()
.s.a
訪問的是父類 SupperClass
的 a
, 爲3.SubClass.getA()
中訪問的是 SubClass
的實例的變量 a
, 因此爲4.PS: 剛剛寫了個多態的例子,想了下,以爲比較麻煩,羅嗦,就改了一個簡化版如上。blog