Java中的类型转换问题

在Java中强制类型转换分为基本数据类型和引用数据类型两种
这里我们讨论的后者,也就是引用数据类型的强制类型转换。

在Java中由于继承和向上造型,子类可以非常自然地转换成父类
比如:Father father = new Son();
在这里Son 对象实例被向上转型为father了,但是请注意这个Son对象实例在内存中的本质还是Son类型的,只不过它的能力临时被消弱了而已,如果我们想变强怎么办?将其对象类型还原!

   Son son = (Son)father;

这条语句是可行的
可见超类转换成子类则需要强制转换,因为子类拥有比超类更多的属性、更强的功能,所以超类转换为子类需要强制。那么,是不是只要是超类转换为子类就会成功呢?其实不然,他们之间的强制类型转换是有条件的。
当我们用一个类型的构造器构造出一个对象时,这个对象的类型就已经确定的,也就说它的本质是不会再发生变化了。
在Father father = new Son()中,表示对象father的本质是Son类型,而声明类型是Father,我们调用father.getClass()时返回的是Son,这个是改变不了的。
当我们这样写时会抛出ClassCastException异常
构造函数参数可忽略
简而言之,当我们试图将本质为超类的对象转换为子类时候就会抛出异常了
相反地,我们将本质为子类的对象转换为超类时候不会抛出异常

|
所以在继承中,子类可以自动转型为父类,但是父类强制转换为子类时只有当引用类型真正的身份为子类时才会强制转换成功,否则失败

发布了15 篇原创文章 · 获赞 9 · 访问量 1168

猜你喜欢

转载自blog.csdn.net/qq_42500831/article/details/88900157
今日推荐