instanceof这个神奇的关键字就是给正在运行时的对象贴标签,标签能贴上的就返回true,贴不上的则返回false。举例:
先定义了两个接口IA、IB和类A,
- package instanceofTest;
- public interface IA {
- }
- package instanceofTest;
- public interface IB {
- }
- package instanceofTest;
- public class A {
- }
再定义了类IAImple继承类A并实现了接口IA和IB,
- package instanceofTest;
- public class IAImple extends A implements IA, IB {
- }
用main方法测试,
- public static void main(String[] args) {
- // IAImple i
- // A i
- // IA i
- IB i
- = new IAImple();
- System.out.println(i instanceof IAImple);
- System.out.println(i instanceof A);
- System.out.println(i instanceof IA);
- System.out.println(i instanceof IB);
- }
无论将i对象定义为IAImple、A、IA、IB,结果都是true。
那么,反过来说,如果一个对象在运行时可以被贴上某个标签,那么这个对象就可以被定义成此种标签类型。知道这点实在很重要。还有一点就是,如果两个对象在运行时都可以被贴上同一标签,那么这两个对象可以认为是同伙,是“我们的人”,即使“他们祖宗八代不曾有过任何交情”。