这个问题牵涉到向上转型和向下转型的问题,推荐两篇文章,讲的比较清楚了。
- 文章1
https://zhuanlan.zhihu.com/p/67227781 - 文章2
https://chenssy.blog.csdn.net/article/details/14111307?spm=1001.2014.3001.5506
个人给出的结论:
- 基本数据类型:
- 自动转换(低到高):
byte→short→char→int→long→float→double - 强制类型转换(高到低):
(欲转换的数据类型)变量名
- 引用数据类型:
- 向上转型:
在继承中,子类可以自动转型为父类。 - 向下转型:
需要显式强制类型转换。并且,在父类引用强制转换为子类引用时,只有当被转换的父类引用指向为子类对象时,才会强制转换成功,否则失败。
也就是说,当能向下转型时,必然已经发生了向上转型。