java中instanceof关键字简单理解

在java中 instanceof的用法为  a instanceof A

判断  对象 a 是否为 类 A 实例化的对象

我们知道由于java的多态性,我们可以用父类的引用指向子类的对象

public class instanceofTest {
	public static void main(String[] args) {
		Person p = new Man();
//		System.out.println(p.isSmoking);//运行报错,因为编译器认为这是一个person对象
		Man m = (Man)p;
		System.out.println(m.isSmoking);//运行成功,而且强转后保留子类独有的属性
		//那么 p 是 person对象 还是 man对象呢?
		System.out.println(p instanceof Woman);//应该为false
		System.out.println(p instanceof Man);//应该为true
        System.out.println(p instanceof Person);//应该为true
	}
}
class Person {
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
}
class Man extends Person{
	public boolean isSmoking;
}
class Woman extends Person {
	public boolean goShopping;
}

运行结果:

小结

a instanceof A 判断 对象a 是不是 类 A的对象,如果 a instanceof B 也为true,则B一定是A的直接或间接父类(a instanceof Object)一定为true