`
supportopensource
  • 浏览: 522070 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

引用类型间的类型转换

阅读更多
引用类型间的转换有自动类型转换和强制类型转换两种。对于类引用类型,只有具有继承关系的类,即父类与子类之间,才可以进行类型的转换。
当引用了某个子类的变量对引用该子类的父类的变量赋值时,会自动进行类型的转换;反之,父类对子类进行赋值时则需要进行强制类型转换。
例如,A为父类,B、C分别继承自类A,分别定义引用这3个类的变量,然后进行各种赋值操作。
定义引用变量:
Object obj = new Object();
A objA = new A();
B objB = new B();
C objC = new C();

● 子类对父类进行赋值:
obj = objA;   //编译成功,将类A赋给直接父类Object,会自动进行类型转换
obj = objB;   //编译成功,将子类B赋给间接父类Object,会自动进行类型转换
objA = objC;  //编译成功,将子类C赋给直接父类A,会自动进行类型转换

● 父类对子类进行赋值:
objA = obj;      //编译出错,将父类Object赋给直接子类A时,需要强制类型转换
objA = (A)obj;   //编译成功
objB = obj;      //编译出错,将父类Object赋给间接子类B时,需要强制类型转换
objB = (B)obj ;   //编译成功
objC = objA;     //编译出错,将父类A赋给直接子类C时,需要强制类型转换
objC = (C)objA;  //编译成功

● 两个子类间的赋值:
如果两个不同的子类继承自同一个父类,那么这两个子类之间也不能进行类型转换,因为它们之间没有直接或间接的继承关系。
objB = objC;      //编译出错,不能从C类型自动转换为B类型
objB = (B)objC;   //编译出错,不能从C类型强制转换为B类型

● 如果声明了一个父类型的变量,但使其引用子类对象,在编译时,java编译器是根据变量被显示声明的类型去编译,因此该变量的类型被看作父类类型。然后将其进行强制类型转换并赋给引用了另一个子类对象的变量时编译成功,但运行时将抛出java.lang.ClassCastException异常,因为这个变量实际引用的是子类对象,两个子类属于不同的类型,也没有继承关系,所以不能将一个子类强制转换为另一个子类。
A objAA = new C();           //objAA变量被显示声明为A类型
objB = (B)objAA;            //编译时,objAA的类型被视为A类型,所以编译成功
//但运行时抛出java.lang.ClassCastException异常


对于引用类型中的数组引用类型,任何两个不同类型的数组之间不能进行类型的转换,但可以将数组转换为java.lang.Object类。
例如:
Object objArray = new Object();
int num_I[] = {1,2,3};
long num_L[] = {4,5,6};
num_I = num_L;      //编译出错,数组引用类型间不能自动进行类型转换
num_I = (int [])num_L; //编译出错,数组引用类型间不能进行强制类型转换
objArray = num_I;    //编译成功
objArray = num_L;    //编译成功

分享到:
评论
2 楼 supportopensource 2012-04-11  
xiaohuafyle 写道
写得不错,关于最后一点的引用数组的转换我没有看懂.
Object[] ins= {
	new Integer(0),
	new Integer(1),
	new Integer(2),
	new Integer(3),
};
Integer[] i = (Integer[]) ins;

这样的转换可以不可以呢?
实际上,执行这段代码,编译器是会报ClassCastException的.
可否赐教?
you can mail me, mark.wang.en@qq.com


这样是不可以的。
最后一点中,int[]之所以能够直接转换成object对象,是因为int[]的父类是Object。
你的代码里,
Object[]是一个对象数组,里面可以放任何对象,你上面放的是4个整型对象,下面我作了下修改,将其中的每一个对象分别转换成相应的对象是可以的:
      
Object[] ins= {      
    new Integer(0),      
    new String("abc"),      
    new Integer(2),      
    new Integer(3)     
};      
Integer i = (Integer) ins[0];      
String s =(String) ins[1];     

但是,将一个Object数组里的所有的对象全部转换成一种类型数组里的数据,有点不合理哦,而且Integer[] i是一个对象,只能引用了一个int型数组对象。
1 楼 xiaohuafyle 2012-04-11  
写得不错,关于最后一点的引用数组的转换我没有看懂.
Object[] ins= {
	new Integer(0),
	new Integer(1),
	new Integer(2),
	new Integer(3),
};
Integer[] i = (Integer[]) ins;

这样的转换可以不可以呢?
实际上,执行这段代码,编译器是会报ClassCastException的.
可否赐教?
you can mail me, mark.wang.en@qq.com

相关推荐

    chromedriver-win32-136.0.7070.0.zip

    chromedriver-win32-136.0.7070.0.zip

    智慧平安城市综合服务平台需求规格说明书 - 多元化信息服务与安全管理

    内容概要:该文档详细介绍了智慧平安城市综合服务平台的需求规格,旨在整合多源异构信息,为警务、安防和社会公共信息服务提供技术支持。平台涵盖用户认证、视频监控、安全监测、政务服务、交通服务、社区服务等多个功能子系统。针对不同终端(如电脑端、手机端和大屏端),提供了定制化的展示和管理功能,并支持与其他第三方系统的接口对接,确保系统的全面性和可扩展性。此外,还明确了平台的高可靠性和高性能要求。 适用人群:项目管理人员、研发人员、测试人员及系统运维团队,主要用于理解和指导智慧平安城市的建设及运营。 使用场景及目标:智慧平安城市综合服务平台的设计和实施旨在增强城市管理效率和服务水平,提高市民生活质量,保障公共安全。通过整合和优化城市各部门资源,提升突发事件的响应和处理能力,构建更加和谐、安全的社会环境。 其他说明:项目要求平台能够处理大量并发请求,在确保数据安全的前提下快速响应各类服务请求,特别是在公共安全领域的智能化辨识及预警方面表现出较高准确性。此外,平台还需要具备良好的用户体验设计,方便各类用户群体操作使用。

    教育领域教师信息管理系统的需求分析和技术实现路径

    内容概要:该文档是一份详细的《系统需求分析说明书》,旨在规划一个针对教育领域的教师信息管理系统。它详尽地阐述了项目的目标和意义在于提升师资管理部门的工作效率和服务质量,确保教职工工资发放的公平性,并通过优化信息管理简化日常操作流程。主要内容涵盖从功能需求如新员工入职、转正考核、教师查询等功能模块的具体流程设计,到非功能性的规定,包括安全措施、辅助指导等方面的内容,以及项目的实施时间安排计划,提供了系统开发的全方位指南,同时配合了直观易懂的用例图表来辅助理解和执行具体的操作步骤。 适合人群:本需求分析报告适用于项目经理、系统分析师、程序员和其他参与或关注教师信息管理系统建设的相关人士。 使用场景及目标:这份需求分析书将被用作指导教师信息系统开发工作的核心参考材料,在项目启动之初作为团队成员沟通的基础文件,帮助相关人员明确各自的任务方向,确定各项工作的完成标准及时限;另外也是日后系统运维、升级扩展的重要依据,对促进后续开发迭代有着重要意义。 其他说明:为了更好地满足实际需求,文中还包括了与业务密切相关的术语解释(词汇表),确保文档内的专业用语得到统一规范表达;同时也提供了一些辅助材料,像思

    前端+微信小程序、node、v2+商品管理系统前后台+小白练习

    类似购物前后台管理系统,适合小白练习及自己添加更改

    Java实现的斗兽棋,复刻经典棋盘,利用swing实现了图形化界面,适用课程设计

    【介绍】 斗兽棋,或动物象棋,由两名玩家(红与黑)进行游戏。游戏的目的是在棋盘两端的对手巢穴中放置一块棋子。你也可以通过夺取对手的所有棋子来获胜。 移动-每件作品都可以向前、向后、向左或向右移动一步,但有一些规则。除了老鼠,没有其他动物可以进入河中,而狮子和老虎可以横向或前后跳过河。通过单击一个块(应出现一个蓝色框)并单击目标方块来移动块。只需将棋子移动到对手占据的方格上,即可捕获每个棋子。如果移动是非法的,棋盘将不会对你的第二次点击做出反应。你不能进入自己的巢穴。 捕捉片段-每个片段对应一种动物,即老鼠、猫、狗、狼、豹、老虎、狮子和大象,并按此顺序排列。每只动物只能捕捉到一只排名较低或与自己同等的动物。例外的是,大象不能抓老鼠,而老鼠可以抓大象。任何一块在河里都无法捕捉到另一块。如果两只老鼠都在河里,一只老鼠可以抓住另一只老鼠。 陷阱-巢穴周围的三个方块,标记为“陷阱”,充当对手棋子的陷阱。任何占据其中一个陷阱的对手棋子都会失去其排名,并可能被任何动物捕获。 老鼠、猫、狗、狼、豹、老虎、狮子、大象。

    java-springboot+vue教学辅助平台实现源码(项目源码-说明文档).zip

    系统采用B/S架构,集成Spring Boot(后端)、Vue.js(前端)和MySQL(数据库),通过RESTful API实现前后端分离。采用MyBatis-Plus优化数据访问,模块化设计与自动配置提升开发效率,结合数据库索引和读写分离确保性能,Element UI提供友好交互,整体具备高扩展性和可维护性。

    特易通国产对讲机MD-398 v1.0中英写频软件

    特易通国产对讲机MD-398 v1.0中英写频软件

    JerryYangSH_LockFreeProgrammin_1741871438.zip

    数据结构学习

    微信小程序_自习室预约_vue_elementui_spri_1741866602.zip

    操作系统学习

    DangoSky_algorithm_1741867625.zip

    数据结构学习

    信息资源整合及应用服务平台的需求规格说明书-系统架构与功能实现详解

    内容概要:该文档是一份关于‘信息资源整合及应用服务平台’需求规格说明书的详尽描述,涵盖项目的总体介绍、业务分析、系统需求、功能模块需求和部署环境等多个方面。文中明确了项目目标是对异构信息资源进行全面整合,并提供了详细的架构设计,确保用户在统一平台上享受高效的资源配置和服务体验。此外还介绍了平台的关键技术工具如TRSWCM和HyBase的使用,及各子系统间协作流程,强调了信息收集渠道多样化及其智能化管理水平。 适用人群:面向项目建设方(即负责系统建设和部署的组织或团队),相关用户和技术人员。 使用场景及目标:为建设‘信息资源整合及应用服务平台’提供建设指导和功能需求分析,明确项目范围、质量标准及开发任务分工;同时有助于相关人员更好地理解该平台的工作机制和应用场景。其他说明:此需求说明书亦可用于指导平台未来的维护和技术升级工作。 其他说明: 包含对系统管理、登录管理、日志管理等多个模块的详细说明,并对每个模块的功能进行了细致划分与介绍。文档末尾附带需求跟踪矩阵,用来监测各个阶段的任务完成情况和进度管理。

    图书馆自助借还机使用感受.doc

    图书馆自助借还机使用感受

    java-springboot+vue就业信息管理系统实现源码(项目源码-说明文档).zip

    系统采用B/S架构,集成Spring Boot(后端)、Vue.js(前端)和MySQL(数据库),通过RESTful API实现前后端分离。采用MyBatis-Plus优化数据访问,模块化设计与自动配置提升开发效率,结合数据库索引和读写分离确保性能,Element UI提供友好交互,整体具备高扩展性和可维护性。

    操作系统_内核_开发框架_SimpleKernel_学习研究_1741864525.zip

    操作系统学习

    【Java毕业项目】基于Springboot+vue的高校毕业生就业信息管理系统(包含:源码+万字LW+PPT+数据库文件+开发文档+视频教程(安装部署+代码讲解+修改系统名称等)

    功能描述: 就业管理员则负责岗位类型、招聘信息以及简历投递等流程的管理,保障了招聘流程的顺畅和有效。企业用户通过系统发布招聘信息、管理收到的简历,并组织面试流程。学生用户可管理个人资料、投递简历、接收面试邀请并查看面试结果,为他们的就业之路提供便利和支持。 更多详细信息:https://blog.csdn.net/u011832806/article/details/145713085 本项目是基于Springboot+Vue开发的高校毕业生就业信息管理系统,高分通过项目,已获导师指导。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的Java学习者。也可作为课程设计、期末大作业 标价包含:项目源码、万字LW、数据库脚本、开发说明文档、安装部署视频、代码讲解视频、全套软件等,该项目可以直接作为毕设使用。 项目都经过严格调试,确保可以运行! 环境说明: 开发语言:java JDK版本:jdk1.8 框架:springboot 数据库:mysql 5.7/8 数据库工具:navicat 开发软件:eclipse/idea

    基于springBoot框架的政府管理系统的设计与实现(Java项目编程实战+完整源码+毕设文档+sql文件+学习练手好项目).zip

    传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的政府管理系统实现了字典管理、公告管理、公文管理、会议室管理、会议室预约管理、来访登记管理、信访督办管理、用户管理、管理员管理等功能。系统用到了关系型数据库中王者MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让政府管理系统更能从理念走到现实,确确实实的让人们提升信息处理效率。 关键字:信息管理,时效性,安全性,MySql

    软件学院_并行_MPI_深度学习_NK-I_作业复习资料库_1741866349.zip

    操作系统学习

    GD32F407完整bootloader与app代码

    GD32F407完整bootloader与app代码

    数据结构_算法_学习_用途不符由于未提供具体用途故在此处用途_1741874180.zip

    数据结构学习

    数据结构_C语言_教材源码_习题解析_学习辅助工具集_1741867538.zip

    数据结构学习

Global site tag (gtag.js) - Google Analytics