instanceof这个神奇的关键字就是给正在运行时的对象贴标签,标签能贴上的就返回true,贴不上的则返回false。举例:

先定义了两个接口IA、IB和类A,
 

  1. package instanceofTest;  
  2.  
  3. public interface IA {  
  4. }  

 

 

 

  1. package instanceofTest;  
  2.  
  3. public interface IB {  
  4. }  

 

  1. package instanceofTest;  
  2.  
  3. public class A {  
  4. }  

再定义了类IAImple继承类A并实现了接口IA和IB,

 

  1. package instanceofTest;  
  2.  
  3.  
  4. public class IAImple extends A implements IA, IB {  
  5.  
  6. }  

用main方法测试,

 

  1.     public static void main(String[] args) {  
  2. //      IAImple i   
  3. //      A i   
  4. //      IA i   
  5.         IB i   
  6.             = new IAImple();  
  7.         System.out.println(i instanceof IAImple);  
  8.         System.out.println(i instanceof A);  
  9.         System.out.println(i instanceof IA);  
  10.         System.out.println(i instanceof IB);  
  11.     } 

无论将i对象定义为IAImple、A、IA、IB,结果都是true。

那么,反过来说,如果一个对象在运行时可以被贴上某个标签,那么这个对象就可以被定义成此种标签类型。知道这点实在很重要。还有一点就是,如果两个对象在运行时都可以被贴上同一标签,那么这两个对象可以认为是同伙,是“我们的人”,即使“他们祖宗八代不曾有过任何交情”。