题目为如下代码的执行结果:

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; ”这一行。

最新文章

  1. py-faster-rcnn之从solver文件创建solver对象,建立pythonlayer
  2. 【Oracle学习笔记-4】内连接和外连接的区别
  3. 离线安装PM2
  4. Smarty模板引擎技术
  5. CorelDRAW 文件实用工具 CDRTools 2
  6. Linux服务器挂死案例分析
  7. LaTeX使用titlesec宏包改变章节编号形式的方法
  8. [LeetCode136]Single Number寻找一个数组里只出现一次的数
  9. 【单源最短路模板】 poj 2387
  10. 将html table 转成 excel
  11. [Swift]LeetCode1022. 从根到叶的二进制数之和 | Sum of Root To Leaf Binary Numbers
  12. 布署配置管理中心apollo
  13. JavaStudy——Java之自动拆箱与自动装箱
  14. ARMV8 Procedure Call Standard
  15. thinkphp5 列表页数据分页查询3-带搜索条件
  16. es简单介绍及使用注意事项
  17. 谷歌技术"三宝"之MapReduce(转)
  18. A - 开门人和关门人(sort+结构体)
  19. 【LOJ】#2670. 「NOI2012」随机数生成器
  20. Missing styles. Is the correct theme chosen for this layout? Use the Theme combo box above the layou

热门文章

  1. Less-minxin传参
  2. delphi---EHlib第三方插件----TDBGridEH,TDBNumberEditEh,TDBComboBoxEh
  3. link options and how g++ is invoked gcc g++
  4. Web 资源介绍
  5. JS给TR隔行换色,鼠标经过有动感
  6. MySQL 乐观锁与悲观锁
  7. zabbix-监控Linux服务器
  8. Ubuntu学习笔记1-基本部分
  9. django【原生分页】
  10. CNN学习笔记:卷积神经网络