其实这个问题以前也困扰过我。我个人理解的一个应用场合就是,当你拿到一个对象的引用时(例如参数),
你可能需要判断这个引用真正指向的类。所以你需要从该类继承树的最底层开始,使用instanceof操作符判断,
第一个结果为true的类即为引用真正指向的类。
例如下面的例子:
1 class Person{} 2 class Student extends Person{} 3 class Postgraduate extends Student{} 4 class Animal{} 5 public class InstanceofTester { 6 public static void main(String[] args) { 7 instanceofTest(new Student()); 8 } 9 public static void instanceofTest(Person p){ 10 // 判断p的真正类型 11 if (p instanceof Postgraduate){ 12 System.out.println("p是类Postgraduate的实例"); 13 } else if(p instanceof Student){ 14 System.out.println("p是类Student的实例"); 15 } else if(p instanceof Person){ 16 System.out.println("p是类Person的实例"); 17 } else if(p instanceof Object) { 18 System.out.println("p是类Object的实例"); 19 } 20 /*if(p instanceof Animal){//此错编译错误,所以做注释 21 System.out.println("p是类Animal的实例"); 22 }*/ 23 } 24 }
这个程序的输出结果是:p是类Student的实例
Person类所在的继承树是:Object<--Person<--Student<--Postgraduate。
这个例子中还加入一个Animal类,它不是在Person类的继承树中,所以不能作为instanceof的右操作数。
你可以跑跑程序,应该就明白什么意思了。