java-----强制类型转换

转载 2016年08月29日 02:12:52

  在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-----强制类型转换

内容来自:http://www.cnblogs.com/chenssy/p/3393160.html 在java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,...
  • qq457163027
  • qq457163027
  • 2016年04月10日 16:43
  • 126

C++之强制类型转换原理

不管是哪种编程语言,都会涉及到数据类型转换。强制类型转换是将操作数的类型转换成所需要的类型。强制类型转换到底是如何实现的?请先看下面一个简单数据类型的转换: 一、简单数据类型的强制类型转换 cha...
  • sjm19901003
  • sjm19901003
  • 2015年03月30日 04:25
  • 2012

Java中的equals和强制类型转换

java中的equals和强制类型转换
  • jinhuoxingkong
  • jinhuoxingkong
  • 2016年05月29日 12:58
  • 1043

强制类型转换使用时的注意事项

作为一个软件工程师,在我们平时的学习和工作中会经常使用到强制 类型转换的操作,但是有些操作我们不得不需要注意一下; 例如: 我们在一个64位的操作系统中; unsigned l...
  • u014100559
  • u014100559
  • 2016年01月28日 23:51
  • 687

强制类型转换运算符的优先级

强制类型转换 int i=10; char b=20; 如:i=b;//这样赋值没有问题,因为低字节类型转换成高字节类型。 如果是b=i;//这样会有问题,b=(char)...
  • hhs49707555
  • hhs49707555
  • 2017年08月27日 10:29
  • 676

C++_4种强制类型转换

C++的四种强制类型转换为:static_cast、const_cast、reinterpret_cast和dynamic_cast 类型转换的一般形式:cast-name(expression); ...
  • u010275850
  • u010275850
  • 2015年10月28日 19:13
  • 2654

java-----内部类

Java内部类详解  说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉。原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法。今天我们...
  • qq_36874177
  • qq_36874177
  • 2017年08月20日 15:15
  • 122

重载()运算符和重载强制类型转换

// 研究了半宿,终于弄清楚了 // 写了这段测试代码可以很好的演示效果 class CConvert { public: CConvert(){m_nValue = 10;} ...
  • feihe027
  • feihe027
  • 2014年06月09日 23:07
  • 1192

JavaScript 中的强制类型转换

JavaScript 作为一个动态编程语言,其中的数据类型会随着程序运行而动态改变。对于很多人来说,强制类型转换很容易造成程序出错,而要记住所有的转换方式又是一件不那么容易的事情。...
  • xjlinme
  • xjlinme
  • 2017年12月18日 23:03
  • 83

Java----->exe

关于将java程序做成exe文件的几种做法(ZT) 可以把普通的Java程序做成真正的exe,也就是单一个exe就可以在没有安装JVM的机器上运行。这样的工具常见的有JET和gcj.前者是收费的...
  • a137268431
  • a137268431
  • 2014年02月17日 10:57
  • 1150
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java-----强制类型转换
举报原因:
原因补充:

(最多只允许输入30个字)