在检查实例时向上投射混乱

  • 本文关键字:混乱 实例 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
}

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

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

这是行动中的多态性。看这里和这里。

如果要避免此行为,请使用 getClass() 而不是 instanceof 。有关示例,请参阅我的答案。

相关内容

  • 没有找到相关文章

最新更新