2015-02-24 37 views
-1

試圖通過我面臨以下問題類型轉換問題與詮釋在Java

一個Java測試
class A { 
    int f() { return 1; } 
} 
class B extends A { 
    int f() { return 2; } 
} 
class C extends B { 
    int f() { return 3; } 
    int test() { 
     return super.f() + 
       ((A)this).f(); 
    } 
} 

想不通爲什麼((A)this).f()返回3而不是1?

+0

這就是多態性是如何工作的。它調用基於實例類型的方法,而不是引用類型。 – Pshemo 2015-02-24 15:35:47

回答

3

這是dynamic dispatch,對象((A)this,其是A)的靜態類型不要緊,僅動態類型,那就是C

同樣,如果你這樣做

A a = this; 
a.f(); 

相同的值(3)將被退回。

相關問題