java多态性带来一个问题,就是如何判断一个变量所实际引用对象的类型。这里java帮我们引入了 instanceof 运算符。
instanceof运算符用来判断一个变量的所引用对象的实际类型,注意是它引用的对象类型,不是变了类型。
请看下面的代码:
public class People { } public class Teacher extends People { } public class President extends Teacher { }
1 public final class Demo { 2 public static void main(String[] args){ 3 People obj = new People(); 4 if(obj instanceof Object){ 5 System.out.println("我是一个对象"); 6 } 7 if(obj instanceof People){ 8 System.out.println("我是一个人"); 9 } 10 if(obj instanceof Teacher){ 11 System.out.println("我是一名教师"); 12 } 13 if(obj instanceof President){ 14 System.out.println("我是一名校长"); 15 } 16 17 System.out.println(" --------------------------------------------- "); 18 19 obj = new Teacher(); 20 if(obj instanceof Object){ 21 System.out.println("我是一个对象"); 22 } 23 if(obj instanceof People){ 24 System.out.println("我是一个人"); 25 } 26 if(obj instanceof Teacher){ 27 System.out.println("我是一名教师"); 28 } 29 if(obj instanceof President){ 30 System.out.println("我是一名校长"); 31 } 32 } 33 }
运行结果:
可以看出,如果变量引用的是当前类或它的子类的实例,instanceof 返回 true ,否则返回false。