2012-08-14 41 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