需要注意的是向上、向下转型之后各个成员变量值的变化

首先来看父类代码

public class Quadrangle {public int rangle=30;public void doit() {System.out.println("父类.doit()");}public void doit1() {System.out.println("父类.doit1()");}
}

子类代码

public class Parallelogram extends Quadrangle{public int edges=4;public int rangle=50;public void doit() {System.out.println("子类.doit()");}public static void main(String[] args) {Parallelogram p=new Parallelogram();System.out.println("子类调用父类的成员属性 angel="+p.rangle); //因为子类又修改了父类中的一个成员属性rangle的值,所以此时p.rangle是子类修改之后的值Quadrangle q=new Parallelogram();//向上转型System.out.println("向上转型之后父类对象调用子类成员属性angle="+q.rangle); //向上转型之后,子类又变成了父类,所以之前在子类中修改的rangle的值,将不起作用,此时q.rangle的值仍然是父类中rangle的值q.doit();q.doit1();//System.out.println("向上转型之后父类对象调用子类成员:"+q.edges); //向上转型之后,父类对象不能调用子类的成员属性Parallelogram r=(Parallelogram) q; //强制向下转型System.out.println("向下转型之后angle="+r.rangle); //向下转型之后,rangle的值又称为子类修改之后的值了r.doit1();r.doit();}}

运行结果为:

子类调用父类的成员属性 angel=50
向上转型之后父类对象调用子类成员属性angle=30
子类.doit()
父类.doit1()
向下转型之后angle=50
父类.doit1()
子类.doit()

从运行结果我们可以看到当我们在向上转型之后,我们在子类中对父类的某一个成员属性进行的修改已经不起作用了,这个成员属性还是存的是它在父类中的值,但是当我们在子类中对父类的成员方法进行重写之后,我们把子类向上转型之后,这个成员方法依然还是调用的是子类中的成员方法,如果我们在子类中没有对父类进行重写,那么成员方法还是父类中的成员方法。
当我们进行向下转型之后,父类中的成员属性已经变成了它在子类中的值了,即如果我们在子类中对父类中某一个成员变量进行修改了话,向下转型之后,父类中的这个成员已经变成了它在子类修改之后的值了(其实此时父类由于向下转型,已经相当于一个子类了)。对于成员方法,我们向下转型之后,子类的可以调用父类的成员方法,如果父类的成员方法没有被子类重写,那么成员方法还是父类的,如果父类中的成员方法被子类重写了,那么向下转型之后,成员方法就是子类中的了。
另外我们需要注意的是当我们向上转型之后,父类的对象不能调用子类独有的属性和方法,就如上面例子中,进行向上转型之后,父类的对象不能调用子类和父类相比独有的成员,即edges,但是此时父类的对象可以调用父类和子类所共有的对象,如上面代码中的成员angle,虽然它可以调用共有的成员angle,但是此时angle的值还是它在父类中的值。

Java学习之向上、下转型相关推荐

  1. 多态Poly中的向上/下转型 Upcast/Downcast

    [参考资料]马克-to-win java中多态polymorphism,向上转型和动态方法调度有什么用? java中什么叫多态,动态方法调度(dynamic method dispatch)? jav ...

  2. [Java]向上/下转型Casting

    一.向上转型. 通俗地讲即是将子类对象转为父类对象.此处父类对象可以是接口. 1,向上转型中的方法调用. 看下面代码: 注意这里的向上转型: Animal b=new Bird(); //向上转型 b ...

  3. Java中的向下转型与向上转型

    java转型问题其实并不复杂,只要记住一句话:父类引用指向子类对象. 什么叫父类引用指向子类对象,且听我慢慢道来. 从2个名词开始说起:向上转型(upcasting).向下转型(downcasting ...

  4. java中的向下转型和向上转型

    关于转型 转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法来加以扩展. 向上转型 向上 ...

  5. java学习笔记十一——对象转型

    向上转型:子类对象当做父类对象来使用,因为子类对象拥有父类对象的所有成员,所以不会发生任何错误. 向下转型:父类对象当做子类对象来使用,因为子类对象部分特性父类并没有,所以需要加强制转换符. 向上转型 ...

  6. java学习(六)多线程 下

    线程之间是怎么通讯的呢? 线程之间的通信是多个线程操作同一个资源 代码: package tread; class Res{String name;String sex; } class input ...

  7. Java的double向上/下取整

  8. 重新精读《Java 编程思想》系列之向上转型与向下转型

    前言 今天重读了一下向上转型与向下转型,有些新的体会,了解了向上转型的好处,及如何向下转型.在此分享给大家. 向上转型 向上转型是用来表现新类和基类之间的关系.在传统中,由导出类转型成基类,在继承图中 ...

  9. java 对象向上转型_JAVA对象向上转型和向下转型

    今天做了一个测试的题目,发现自己还是很多问题没有静下心来做.很多问题是可以自己解决的但是自己一是没有读清题意,二是自己心里太急躁了.所以这个要自己应以为鉴! 对象的转型问题其实并不复杂,我们记住一句话 ...

最新文章

  1. java flex xml_FLEX与JAVA的交互问题 -DOM4J-xml
  2. 2019.7.13刷题统计
  3. 一个Excel导出类的实现过程(二):显示定制
  4. 【工业控制】PolyWorks培训教程-设备转站
  5. 最新进展!单细胞数据显示ACE2在鼻腔、肾脏、睾丸均有分布!
  6. 2017.5.10 华容道 失败总结
  7. 启动修复黑屏服务器,使用光标修复Windows 10黑屏
  8. xlwings 合并单元格 读取_将16家公司财务报表数据过入合并底稿表格,我只用了1分钟...
  9. GIS_GeoTools栅格数据分析之图像变化检测
  10. cve2018 linux内核提权漏洞,CVE-2018-18955:较新Linux内核的提权神洞分析
  11. Atitit 股票选取指南attilax总结
  12. 关于SOLIDWORKS缩略图预览失败的解决方案
  13. 关于在tomcat9中配置server.xml中URIEncoding=UTF-8无效的解决方法
  14. 携手业内专家赋能AI时代--EpiK铭识协议发起开源知识运动
  15. C++猜数字(文曲星游戏)
  16. ui设计需要学编程吗难不难学习
  17. 2-5 CAD基础 打断(break)和合并(join)
  18. System.setOut(ps)重定义了输出流后,如何重定向控制台输出
  19. 基于HTML+CSS制作静态页面【剪纸文化15页】传统文化设计题材 dreamweaver制作静态html网页设计作业作品...
  20. win10时间不准_安卓机时间突然变慢10分钟?移动发布回应

热门文章

  1. [Hadoop] - 异常Cannot obtain block length for LocatedBlock
  2. 【实践】美团外卖图谱推荐比赛冠军经验分享:从多领域优化到AutoML框架
  3. 【报告分享】2021中国短视频和直播电商行业人才发展报告.pdf(附下载链接)...
  4. 【报告分享】2020技术趋势报告-德勤-202003.pdf(附120页pdf原文下载链接)
  5. 【报告分享】德勤-教育行业发展报告(政策、资本、AI、职业教育).pdf2019年中国外卖产业调查研究报告.pdf...
  6. 2015-2020年各类国际会议与期刊基于图像的三维对象重建论文综述(6)——Training
  7. conda清华源安装pytorch依旧慢踩坑
  8. 全球首发!计算机视觉Polygon Mesh Processing读书笔记6——微分几何中的Metric Properties
  9. DeepWalk: Online Learning of Social Representations-2
  10. 机器学习算法总结之支持向量机(五)