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
。有关示例,请参阅我的答案。