关键字instanceof

x instanceof A :检验x是否为类A的对象,返回值为Boolean型。如果是,返回true;如果不是,返回false。

要求x所属的类与类A必须是子类与父类的关系。否则编译错误

如果x属于类A的子类B,x instanceof A的值也为true

使用情景:为了避免在向下转型是出现异常,先进行instanceof判断,一旦为true则向下转型;若不是则为false。

如,类B是类A的父类,如果a instanceof A返回true,则a instanceof B也返回true。

向下转型时出现的问题:

问题一:编译时通过,运行时不通过。

  1. //例一
  2. Person p3=new Woman();
  3. Man m3=(Man)p3;
  4. //例二:
  5. Person p4=new Person();
  6. Man m4=(Man)p4;

问题二:编译时通过,运行时也通过。

  1. Object obj=new Woman;
  2. Person p1=(Person)obj;

问题三:编译不通过。

  1. Man m5=new Woman;

右边应为左边的子类