【问题标题】:upcasting confusion while checking instanceof在检查 instanceof 时向上转换混淆
【发布时间】:2012-08-14 12:23:29
【问题描述】:
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

}

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

【问题讨论】:

  • 狗不应该扩展动物吗?
  • 我添加了extends Animal,OP可能只是忘记了它......

标签: java upcasting


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这是多态性的作用。请参阅herehere

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

    【讨论】:

    • 虽然您的示例没有显示您的用法,但在类层次结构上使用这种构造时要小心。如果您发现自己一直在检查 if 语句中的类型,您可能需要考虑将该行为放在一个方法中,该方法可以为每个子类以不同方式实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多