检查instanceof时的向上混乱

时间:2012-08-14 12:23:29

标签: java upcasting

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 个答案:

答案 0 :(得分:4)

因为在运行时,本地变量g引用的对象属于Dog类型(因此也是Animal,因为Dog extends Animal,你的例子中缺少这个)。

答案 1 :(得分:4)

这是行动中的多态性。请参阅herehere

如果您想避免此行为,请使用getClass()代替instanceof。请参阅我的回答here以获取示例。