*****instanceof和类型转换*****难点,多看笔记

instanceof

 

 

判断类型是否相似

instanceof:判断左边对象是否是右边类的一个实例。如图

 

 

 

 说明如下图

 

 

 

注意

instanceof两边至少要有一定联系才行,否则就会报错,如下图

 

 

 

 Person类的对象person和String无任何联系,Student类的对象student很明显和String、Teacher无任何联系,直接报错了

 

 上图说明Teacher和person不相干,因为现在的person是指向Student类,而这个类和Teacher类很明显是不相关的,所以输出为false

总结

System.out.println(X instanceof Y);

这个代码是否能够编译通过,是看引用类型是不是和y存在父子关系,例如下图:很明显对象student的引用类型Student类和右边的y即String类还有Teacher类没有父子关系的,程序无法编译

 

 结果为true还是false是看x指向的实际类型是否是y的子类型,例如下图:person指向的实际类型Student是否是y的子类型,是输出true,不是就输出false

 

 

类型转换

问题解决

父类转子类

父类无法直接调用子类的独有方法

 

 

 

如图转换后无法执行Student类里的go方法,如何解决呢?

将这个对象转换为Student类就可以使用Student类里边的go方法了

如图很明显要将Person类对象转换为Student类,属于高转低,要强制转换

 

 

如上图所示,可以使用Student类里边的go方法了,因为此刻的student已经是属于Student类了

或者如下图这样转化

 

 

子类转父类

子类转换为父类,会丢失掉自己本身的一些方法

 

 

如图将子类Student类对象student转换为父类Person类对象person,Student类的go方法就没法用了

总结

1.父类不能直接调用子类的方法,要先类型转换后才能调用,也就是向下转换

如上图,即为将父类Person转换为子类Student,然后父类的对象才能调用子类方法

2.子类转换为父类子类的一些方法就不能用了

***总而言之***

因为继承,子类内容包括父类内容包括父类没有的内容,即独有方法,所以子变父需要砍去部分内容,即自身独有的方法,而父变子需要开辟只属于子类的部分空间,即独有方法,所以需要强制转换

类型转换意义

方便方法的调用,不用重新new类,直接给类降级或者升级就可以调用它的方法了

posted @ 2022-03-29 22:17  无关风月7707  阅读(27)  评论(0编辑  收藏  举报