引用原文链接:https://blog.csdn.net/YXXXYX/article/details/120205124
概念:instanceof 概念在多态中引出,因为在多态发生时,子类只能调用父类中的方法(编译时类型的方法),而子类自己独有的方法(运行时类型的方法)无法调用,如果强制调用的话就需要向下转型,语法和基本类型的强制类型转换一样;但是向下转型具有一定的风险,很有可能无法成功转化,为了判断能否成功转化,就需要 instanceof 先进行一个判断,然后再进行转换操作;
instanceof 是一个运算符,语法为:引用类型变量(object) instanceof 类(class)。左边是对象,右边是类
功能:
判断前面的对象是否属于后面的类,或者属于其子类;如果是,返回 true,不是返回 false; boolean
注意事项:
使用 instanceof 时需要保证:
instanceof 前面的引用变量编译时的类型要么与后面的类型相同,要么与后面的类型具有父子继承关系。
null用instanceof跟任何类型比较,是返回false,而不是编译错误。
当你入参无法判断是哪个类型的子类,可以使用instanceof 先判断,再互相转换类型。
public static void trans(Person p) { if (p instanceof Students) { Students s2 = (Students)p; // 通过向下转型便可以调用Students特有方法了 s2.playing(); } else if (p instanceof Teachers) { Teachers t2 = (Teachers)p; t2.shopping(); } }
因为在实际开发中,如果需要向下转型的话,你无法保证你所要转换的可以成功,所以一定要记住:
只要是向下转型,一定要先用instanceof判断,再进行转换!!!!切记
instanceof总的来说就是在向下转型(强转)中必须使用的,可以保证自己代码的健壮性;
所以向下转型步骤是:先判断(instanceof),再转换(type)。