2012-08-14 44 views
1
class Animal 
{ 

} 

    class Dog extends Animal 
    { 

    } 

    class main 
    { 
     public static void main(String args[]) 
    Animal g= new Dog(); 
    System.out.println(g instanceof Dog);  // 1st case 

    System.out.println(g instanceof Animal); // 2nd case 

} 

問題:爲什麼輸出在兩種情況下都是真的?上傳混淆,同時檢查實例

+2

不宜狗延長動物有關係嗎?我加 – martijno 2012-08-14 12:27:36

+0

'延伸Animal'中,OP可能只是忘了...... – 2012-08-14 12:28:48

+0

雅對不起,我忘了... ... – Nil 2012-08-14 17:18:18

回答

4

因爲,那個被引用,在運行時的對象由本地變量gDog類型的(因此也是Animal,因爲Dog extends Animal,雖然這是一個從你的榜樣缺失)。

4

這是多態的行動。請參閱herehere

如果你想避免此問題,使用getClass()代替instanceof。以我的回答here爲例。

+0

+1暗示'的getClass()' – martijno 2012-08-14 12:38:45

+0

雖然你的例子沒有顯示您的使用情況,警惕隨時使用這種類的層次結構。如果您發現自己始終在if語句中檢查類型,則可能需要考慮將該行爲放入可爲每個子類實現的不同方法中。 – Matt 2012-08-14 14:31:31