多态性带来了一个问题,就是如何判断一个变量所实际引用的对象的类型。C++使用runtime-type information(RTTI),Java使用instanceof操作符。

  instanceof运算符用来判断一个变量所引用的对象的实际类型,注意是它引用的对象的类型,不是变量的类型。请看下面的代码:

  public final class Demo{

  public static void main(String[]args){

  //引用People类的实例

  People obj=new People();

  if(obj instanceof Object){

  System.out.println("我是一个对象");

  }

  if(obj instanceof People){

  System.out.println("我是人类");

  }

  if(obj instanceof Teacher){

  System.out.println("我是一名教师");

  }

  if(obj instanceof President){

  System.out.println("我是校长");

  }

  System.out.println("-----------");//分界线

  //引用Teacher类的实例

  obj=new Teacher();

  if(obj instanceof Object){

  System.out.println("我是一个对象");

  }

  if(obj instanceof People){

  System.out.println("我是人类");

  }

  if(obj instanceof Teacher){

  System.out.println("我是一名教师");

  }

  if(obj instanceof President){

  System.out.println("我是校长");

  }

  }

  }

  class People{}

  class Teacher extends People{}

  class President extends Teacher{}

  运行结果:

  我是一个对象

  我是人类

  -----------

  我是一个对象

  我是人类

  我是一名教师

  可以看出,如果变量引用的是当前类或它的子类的实例,instanceof返回true,否则返回false。

  更多技术教程,请关注技术教程网www.jishujc.com