首页 / JAVA / Java -- 上转型和下转型
Java -- 上转型和下转型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java -- 上转型和下转型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2028字,纯文字阅读大概需要3分钟。
内容图文
![Java -- 上转型和下转型](/upload/InfoBanner/zyjiaocheng/600/170e7dcbe10c4a5396bf13206cd37131.jpg)
首先理解一句话:父类引用指向子类对象;什么意思呢?
记得在刚开始学习面向对象编程时候,经常听老师讲:如果要使用一个类中的成员,就需要先实例化对象,就是说要先创建一个引用类型的对象,就可以使用里边的内容。
比如: Person person = new Person();
1、首先,右边的 new Person() ,是以Person类为模板,在堆空间里创建一个Person类对象(也简称为Person对象)。
2、末尾的()意味着,在对象创建后,立即调用Person类的构造函数,对刚生成的对象进行初始化。构造函数是肯定有的。如果你没写,Java会给你补上一个默认的构造函数。
3、左边的 Person person 创建了一个Person类引用变量。所谓Person类引用,就是以后可以用来指向Person对象的对象引用。
所以,上边那一句话中的父类引用就是左边的内容,子类对象就是右边的内容,只不过,左边的是父类,右边的类是继承自左边的子类。
向上转型
有一个父类FatherService,有一个子类SonService继承自FatherService
就是 FatherService fatherService = new SonService();
这就是父类引用指向子类对象,也叫向上转型,现在fatherService引用指向一个SonService对象
向下转型
再把fatherService给SonService引用,就是向下转型
SonService sonService = (SonService) fatherService; 不过,现在fatherService还是指向SonService对象
所以,向上不需要强制转换,而向下需要
另外,如果父类引用指向父类对象,就不可以向下转型,如下:
FatherService fs = new FatherService(); SonService ss = (SonService) fs;
这样就会报错:com.zg.service.FatherService cannot be cast to com.zg.service.SonService,为什么?
其实“单纯的”父类是不能强转成子类的,这就好比:水果(父类)是苹果(子类)一样,不合逻辑。为啥上边那个可以,这段代码也是我初学时很纳闷的地方,先看 FatherService fatherService = new SonService(); 父类FatherService由子类SonService创建的,之后,子类对象sonService由父类fatherService对象强制转换而来,这个就不是“单纯的”父类了,因为父类引用指向子类对象,它和子类已经构建了联系,这就好比,首先说明了这个水果是苹果(构建了联系),之后说的这个水果,它就是苹果。
总结:
1、父类引用指向子类对象,而子类引用不能指向父类对象
2、把子类对象直接赋给父类引用叫upcasting向上转型,向上转型不用强制转换
3、把指向子类对象的父类引用赋给子类引用叫向下转型(downcasting),要强制转换。
内容总结
以上是互联网集市为您收集整理的Java -- 上转型和下转型全部内容,希望文章能够帮你解决Java -- 上转型和下转型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。