----原文地址-----:
https://www.cnblogs.com/chenssy/p/3393160.html

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

在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需要强制转换。因为子类拥有比父类更多的属性、更强的功能,所以父类转换为子类需要强制。那么,是不是只要是父类转换为子类就会成功呢?其实不然,他们之间的强制类型转换是有条件的。

当我们用一个类型的构造器构造出一个对象时,这个对象的类型就已经确定的,也就说它的本质是不会再发生变化了。在Java中我们可以通过继承、向上转型的关系使用父类类型来引用它,这个时候我们是使用功能较弱的类型引用功能较强的对象,这是可行的。但是将功能较弱的类型强制转功能较强的对象时,就不一定可以行了。

举个例子来说明。比如系统中存在Father、Son两个对象。首先我们先构造一个Son对象,然后用一个Father类型变量引用它:

  Father father = new Son();

在这里Son 对象实例被向上转型为father了,但是请注意这个Son对象实例在内存中的本质还是Son类型的,只不过它的能力临时被消弱了而已,如果我们想变强怎么办?将其对象类型还原!

      Son son = (Son)father;

这条语句是可行的,其实father引用仍然是Father类型的,只不过是将它的能力加强了,将其加强后转交给son引用了,Son对象实例在son的变量的引用下,恢复真身,可以使用全部功能了。

  前面提到父类强制转换成子类并不是总是成功,那么在什么情况下它会失效呢?  当引用类型的真实身份是父类本身的类型时,强制类型转换就会产生错误。例如:Father father = new  Father();Son son = (Son) father;这个系统会抛出ClassCastException异常信息。

所以编译器在编译时只会检查类型之间是否存在继承关系,有则通过;而在运行时就会检查它的真实类型,是则通过,否则抛出ClassCastException异常。

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

java 对象的强制类型转换相关推荐

  1. Java引用类型的强制类型转换

    正如有时候需要将浮点型的数值转换为整型数值一样,有时候也可能需要将某个类的对象引用转换成两外一个类的对象引用. 进行强制类型转换的唯一原因是:在暂时忽视对象的实际类型之后,使用对象的全部功能. 编写J ...

  2. java中的强制类型转换注意事项_浅谈Java中强制类型转换的问题

    为了更好的理解我们先看下面的例子: package com.yonyou.test; import java.util.ArrayList; import java.util.Iterator; im ...

  3. Java中的强制类型转换

    尽管自动类型转换是很方便的,但并不能满足所有的编程需要. 例如,当程序中需要将 double 型变量的值赋给一个 int 型变量,该如何实现呢? 显然,这种转换是不会自动进行的!因为 int 型的存储 ...

  4. 什么是JAVA中的强制类型转换

    文章目录 0 写在前面 1 强制类型转换 2 写在末尾 0 写在前面 在必要的时候,int类型会自动转变为double类型,但是另一方面,业务逻辑上有时候需要double类型转变为int. 在 Jav ...

  5. 简单介绍java中的强制类型转换

    强制类型转换的概念 将一个类型强制转换成另一个类型的过程称为强制类型转换. 强制类型转换的使用 格式:所要转换的类型 变量名 = (所要转换的类型)原类型: 例子: double x = 3.14; ...

  6. java 中的强制类型转换

    1 ) 整数 int 转换成字串 String , 有三种方法 :  String s = String.valueOf(i); String s = Integer.toString(i); Str ...

  7. Java学习_强制类型转换

    对于byte/short/char三种类型来说,如果右侧赋值的数值没有超过范围,那么javac编译器将会自动隐含补上一个(byte)(short)(char) 1.如果没有超过左侧的范围,编译器自动补 ...

  8. java中的强制类型转换:int和byte

    https://blog.csdn.net/liangsir_l/article/details/70239198 转载于:https://www.cnblogs.com/10zhang/p/9375 ...

  9. java小数强制转换,Java中的强制类型转换 大数转小数

    首先要明确一下转换规则:大数转小数,多出的高位部分会被截断.比如 int 占 4个byte(32 bit), byte占 1个byte(8bit), 那int 转 byte ,int 高位多出的那24 ...

最新文章

  1. 下载插件(贪心算法)
  2. 在coursera上有哪些值得推荐的课程
  3. SAP Spartacus Visible Focus
  4. spark的ContextCleaner清理
  5. c语言找出递增子数组的长度,编程之美2.16 数组中最长递增子序列的长度
  6. vue-router的beforeEach的使用?
  7. vbs比较两个数组里的数的大小_BAT 高频面试题:寻找两个有序数组的中位数
  8. 阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_06.mybatis的环境搭建
  9. 我的世界服务器怎么修改标语,怎么用资源包修改我的世界闪烁标语
  10. 首屏渲染优化性能优化
  11. 前端词汇(后续整理)
  12. Java读取环境变量
  13. Fiddler如何进行弱网测试
  14. 《Real-Time Rendering 4th Edition》读书笔记--简单粗糙翻译 第二章 渲染管线 The Graphics Rendering Pipeline
  15. 2018年京东春招笔试题
  16. Zabbix监控自定义模板,自定义监控项以及图标显示
  17. supermap学习系列(七)——用户自己在地图上添加点、线、面标注
  18. mysql配置asp_配置服务器使它支持asp,cgi,php,mysql_MySQL
  19. 英雄联盟服务器乱码怎么修复,英雄联盟异常0.404.80070051解决方法
  20. QT软件开发: QProcess启动进程完成交互并获取输出

热门文章

  1. python画直方图-python plotly绘制直方图实例详解
  2. 基于TMS320VC5507的语音识别系统实现
  3. VB589语音识别芯片开发
  4. 一种连续语音识别系统的制作方法
  5. js table 生成序号_CSS Counter 以及 CSS content 内容生成技术的实用价值
  6. 服务器资源评估文档,服务器存储资源评估
  7. python中sys用法_Python中sys模块功能与用法实例详解
  8. 360mysql连接池_自己动手写个数据库连接池
  9. it男java_java-学习8
  10. Linux在线下载安装MySQL8