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

}

问题:为什么在这两种情况下输出都是正确的?

4

2 回答 2

4

因为在运行时,由局部变量引用的对象是g类型的Dog(因此也是Animal, because Dog extends Animal,尽管您的示例中缺少该对象)。

于 2012-08-14T12:25:31.467 回答
4

这是作用中的多态性。见这里这里

如果您想避免这种行为,请使用getClass()而不是instanceof. 例如,请参阅我的答案here

于 2012-08-14T12:25:38.477 回答