下面的文章要给大家继续介绍的就是java对象类型转换的强制对象类型转换方面的知识,一起来看看吧。
Java编译器允许在具有直接或间接继承关系的类之间进行类型转换。
对于向下转型,必须进行强制类型转换;对于向上转型,不必使用强制类型转换。
例:
对于一个引用类型的变量,Java编译器按照它声明的类型来处理。
假如,使用animal调用str和eatMethod()方法将会出错。
如下:
animal.str = ""; // 编译出错,提示Animal类中没有str属性 animal.eatMethod(); // 编译出错,提示Animal类中没有eatMethod()方法
假如要访问Cat 类的成员,那么就必须要通过强制类型转换。
如下:
((Cat)animal).str = ""; // 编译成功 ((Cat)animal).eatMethod(); // 编译成功
将Animal对象类型强制转换为Cat对象类型,这个时候上面两句编译成功。
对于如下语句,因为使用了强制类型转换,所以也会编译成功。
例如:
Cat cat = (Cat)animal; // 编译成功,将Animal对象类型强制转换为Cat对象类型
类型强制转换时想运行成功就必须保证父类引用指向的对象一定是该子类对象,最好使用instanceof运算符判断后,再强转。
例如:
Animal animal = new Cat(); if (animal instanceof Cat) { Cat cat = (Cat) animal; // 向下转型 ... }
子类的对象可以转换成父类类型,而父类的对象实际上无法转换为子类类型。
因为通俗地讲,父类拥有的成员子类肯定也有,而子类拥有的成员,父类不一定有。
因此,对于向上转型,不必使用强制类型转换。
例如:
Cat cat = new Cat(); Animal animal = cat; // 向上转型,不必使用强制类型转换
假如,两种类型之间没有继承关系,那么将不允许进行类型转换。
例如:
Dog dog = new Dog(); Cat cat = (Cat)dog; // 编译出错,不允许把Dog对象类型转换为Cat对象类型
关于强制对象类型转换方面的知识就介绍到这里了,请继续关注奇Q工具网吧,有更多的java基础知识,可以为你分想哦。
推荐阅读: