文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java 强制类型转换原理(父类转子类、子类转父类)

2023-09-22 16:15

关注

在Java中,对象的强制转换(也称为类型转换)是将一个对象的引用转换为另一个类的引用,前提是这两个类之间存在继承或实现关系。强制转换可能会导致运行时异常,因为在转换的过程中,如果对象的实际类型与转换的目标类型不兼容,就会抛出ClassCastException异常。

子类转父类

Son s = new Son();// 类型提升Father f = (Father)s;//可以

分析: 子类继承父类,就拥有了父类的一切。某种程度上说,儿子可以代替爸爸,爸爸能做的事儿子也可以做。子类转父类后,父类对象f引用指向子类对象,所以其本质任然是子类,f只能调用父类的方法,如果子类重写了父类的方法,则调用的是子类的方法(多态性)

父类转子类

1. 真实父类对象转子类对象,报ClassCastException异常

Father f = new Father();Son s = (Son)f;//出错 ClassCastException

分析: 创建一个父类的实例,想要强制把父类对象转换成子类的对象,是不行的。父亲有的,通过继承儿子也有,反过来儿子有的父亲却不一定有。

2. “假”父类对象转子类对象,可以

Father f = new Son();Son s = (Son)f;//可以

分析:只有父类对象本身就是用子类new出来的时候, 才可以在将来被强制转换为子类对象。这个时候父类的本质依然是子类对象(儿子只是装成了爸爸),子类有的属性f都拥有,只是f暂时不能操作子类特有的属性,所以可以转换回为子类对象(变回儿子本身)

底层实现原理

底层原理是通过虚拟机中的类型检查和类型信息来实现的。当进行强制类型转换时,虚拟机会在运行时检查对象的实际类型是否与转换的目标类型兼容。如果是兼容的,就会将对象引用转换为目标类型的引用,否则会抛出ClassCastException异常。

在Java中,对象的类型信息是通过两种主要机制来处理的:对象头和虚方法表。

  1. 对象头:每个Java对象都有一个对象头,其中包含了一些用于虚拟机处理对象的元数据。对象头中包含了一个指向类元数据的指针(指向对象的类的信息)。这使得虚拟机可以在运行时确定对象的实际类型。

  2. 虚方法表:对于每个类,Java虚拟机会维护一个虚方法表,其中包含了类的虚方法的地址。虚方法表允许在运行时动态地解析方法调用,而不是在编译时静态地绑定。通过虚方法表,Java虚拟机可以找到并调用对象的实际方法。

在进行强制类型转换时,虚拟机会首先检查对象头中指向类元数据的指针,然后查找目标类型的类信息。如果目标类型是源类型的子类(或实现了源类型的接口),那么转换是有效的。虚拟机会根据实际类型来调整对象引用的指针,使其指向目标类型的类信息和虚方法表,从而实现类型转换。

然而,如果目标类型不是源类型的子类(或未实现源类型的接口),虚拟机将无法进行有效的转换,这时会抛出ClassCastException异常。

总结:Java对象的强制类型转换是通过虚拟机在运行时检查对象的实际类型,并根据类型信息来调整对象引用的指针来实现的。这样的机制使得Java具有动态类型的特性,但也需要开发人员在进行类型转换时注意类型的兼容性,以避免ClassCastException异常。

来源地址:https://blog.csdn.net/weixin_44863237/article/details/131890038

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯