scjp考试准备 - 10 - 类型转换
2024-10-20 11:56:58
题目为如下代码的执行结果:
class Building{} public class Barn extends Building{ public static void main(String[] args){
Building build1 = new Building();
Barn barn1 = new Barn();
Barn barn2 = (Barn)build1;
Object obj1 = (Object)build1;
String str1 = (String)build1;
Building build2 = (Building)barn1;
} }
题目考试的点是引用类型的强制转换。引用类型的强制类型转换有以下需要注意的点:
1. 引用类型的转换只能在具有继承关系的两个类之间进行。如果两个类之间不具有继承关系则会在编译时报“不可类型转换”的错误。
2. 若将子类对象强制转为父类类型,那么被转换的子类型对象的编译时类型被转为父类型,但其运行时类型仍然是子类型。
3. 如果把要把父类型的变量转换为子类型,一般要求这个对象是子类型实例(编译时类型是父类型,运行时类型是子类型)。否则虽然编译时可以通过,但是在执行时会报出ClassCastException异常。
4. 对于3中的情形, 在强制类型转换前,使用instanceof运算符进行判断。instanceof运算的前一个操作数通常是一个引用类型变量,后一个操作数一般为一个类或接口,比如“barn1 instanceof Barn”。instanceof用于判断前面的对象是否是后面的类(或其子类、实现类)的实例。
5. 使用instanceof运算符需要注意一点,就是instanceof运算符前面的操作数的编译时类型要么与后面的类相同,要么具有继承关系,不然在编译时就会报“不可转换的类型”错误。
根据第一点,可知上面的这道题在编译时会报错。问题就出在“String str1 = (String)build1; ”这一行。
最新文章
- py-faster-rcnn之从solver文件创建solver对象,建立pythonlayer
- 【Oracle学习笔记-4】内连接和外连接的区别
- 离线安装PM2
- Smarty模板引擎技术
- CorelDRAW 文件实用工具 CDRTools 2
- Linux服务器挂死案例分析
- LaTeX使用titlesec宏包改变章节编号形式的方法
- [LeetCode136]Single Number寻找一个数组里只出现一次的数
- 【单源最短路模板】 poj 2387
- 将html table 转成 excel
- [Swift]LeetCode1022. 从根到叶的二进制数之和 | Sum of Root To Leaf Binary Numbers
- 布署配置管理中心apollo
- JavaStudy——Java之自动拆箱与自动装箱
- ARMV8 Procedure Call Standard
- thinkphp5 列表页数据分页查询3-带搜索条件
- es简单介绍及使用注意事项
- 谷歌技术";三宝";之MapReduce(转)
- A - 开门人和关门人(sort+结构体)
- 【LOJ】#2670. 「NOI2012」随机数生成器
- Missing styles. Is the correct theme chosen for this layout? Use the Theme combo box above the layou