instanceof向下转型判断

发布时间 2023-04-21 20:06:31作者: binbinx

https://www.cnblogs.com/SjhCode/p/instanceof.html

引用原文链接: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)。