向上转型和向下转型

向上转型和向下转型

ID:38744120

大小:58.00 KB

页数:9页

时间:2019-06-18

向上转型和向下转型_第1页
向上转型和向下转型_第2页
向上转型和向下转型_第3页
向上转型和向下转型_第4页
向上转型和向下转型_第5页
资源描述:

《向上转型和向下转型》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型。5.13.1向上转型我们在现实中常常这样说:这个人会唱歌。在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就是说我们更倾向于使用抽象概念“人”。再例如,麻雀是鸟类的一种(鸟类的子类),而鸟类则是动物中的一种(动物的子类)。我们现实中也经常这样说:麻雀是鸟。这两种说法实际上就是所谓的向上转型,通俗地说就是子类转型成父类。这也符合Java提倡的面向抽象编程思想。来看下面的代码:packagea.b;publicclassA{publicvoida1(){      System.ou

2、t.println("Superclass");}}A的子类B:packagea.b;publicclassBextendsA{publicvoida1(){      System.out.println("Childrenclass");//覆盖父类方法}      publicvoidb1(){}//B类定义了自己的新方法}C类:packagea.b;publicclassC{publicstaticvoidmain(String[]args){      Aa=newB();//向上转型      a.a1();}}如果运行C,输出的是Superclass

3、还是Childrenclass?不是你原来预期的Superclass,而是Childrenclass。这是因为a实际上指向的是一个子类对象。当然,你不用担心,Java虚拟机会自动准确地识别出究竟该调用哪个具体的方法。不过,由于向上转型,a对象会遗失和父类不同的方法,例如b1()。有人可能会提出疑问:这不是多此一举吗?我们完全可以这样写:Ba=newB();a.a1();确实如此!但这样就丧失了面向抽象的编程特色,降低了可扩展性。其实,不仅仅如此,向上转型还可以减轻编程工作量。来看下面的显示器类Monitor:packagea.b;publicclassMonito

4、r{publicvoiddisplayText(){}publicvoiddisplayGraphics(){}}液晶显示器类LCDMonitor是Monitor的子类:packagea.b;publicclassLCDMonitorextendsMonitor{publicvoiddisplayText(){      System.out.println("LCDdisplaytext");}publicvoiddisplayGraphics(){      System.out.println("LCDdisplaygraphics");}}阴极射线管显示器

5、类CRTMonitor自然也是Monitor的子类:packagea.b;publicclassCRTMonitorextendsMonitor{publicvoiddisplayText(){      System.out.println("CRTdisplaytext");}publicvoiddisplayGraphics(){      System.out.println("CRTdisplaygraphics");}}等离子显示器PlasmaMonitor也是Monitor的子类:packagea.b;publicclassPlasmaMonitor

6、extendsMonitor{publicvoiddisplayText(){      System.out.println("Plasmadisplaytext");}publicvoiddisplayGraphics(){      System.out.println("Plasmadisplaygraphics");}}现在有一个MyMonitor类。假设没有向上转型,MyMonitor类代码如下:packagea.b;publicclassMyMonitor{publicstaticvoidmain(String[]args){      run(ne

7、wLCDMonitor());      run(newCRTMonitor());      run(newPlasmaMonitor());}publicstaticvoidrun(LCDMonitormonitor){      monitor.displayText();      monitor.displayGraphics();}publicstaticvoidrun(CRTMonitormonitor){      monitor.displayText();      monitor.displayGraphics();}publicstatic

8、voidr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。