注册做网站的公司有哪些,重庆市住房和城乡建设网站,工作作风,淘宝开网站建设店铺分析在Java编程中经常碰到类型转换#xff0c;对象类型转换主要包括向上转型和向下转型。向上转型我们在现实中常常这样说#xff1a;这个人会唱歌。在这里#xff0c;我们并不关心这个人是黑人还是白人#xff0c;是成人还是小孩#xff0c;也就是说我们更倾向于使用抽象概念…在Java编程中经常碰到类型转换对象类型转换主要包括向上转型和向下转型。向上转型我们在现实中常常这样说这个人会唱歌。在这里我们并不关心这个人是黑人还是白人是成人还是小孩也就是说我们更倾向于使用抽象概念“人”。再例如麻雀是鸟类的一种(鸟类的子类)而鸟类则是动物中的一种(动物的子类)。我们现实中也经常这样说麻雀是鸟。这两种说法实际上就是所谓的向上转型通俗地说就是子类转型成父类。这也符合Java提倡的面向抽象编程思想。来看下面的代码A的子类BC类如果运行C输出的是Superclass 还是Childrenclass不是你原来预期的Superclass而是Childrenclass。这是因为a实际上指向的是一个子类对象。当然你不用担心Java虚拟机会自动准确地识别出究竟该调用哪个具体的方法。不过由于向上转型a对象会遗失和父类不同的方法例如b1()。有人可能会提出疑问这不是多此一举吗我们完全可以这样写确实如此但这样就丧失了面向抽象的编程特色降低了可扩展性。其实不仅仅如此向上转型还可以减轻编程工作量。来看下面的显示器类Monitor液晶显示器类LCDMonitor是Monitor的子类阴极射线管显示器类CRTMonitor自然也是Monitor的子类等离子显示器PlasmaMonitor也是Monitor的子类现在有一个MyMonitor类。假设没有向上转型MyMonitor类代码如下可能你已经意识到上述代码有很多重复代码而且也不易维护。有了向上转型代码可以更为简洁我们也可以采用接口的方式例如将液晶显示器类LCDMonitor稍作修改CRTMonitor、PlasmaMonitor类的修改方法与LCDMonitor类似而MyMonitor可以不不作任何修改。可以看出向上转型体现了类的多态性增强了程序的简洁性。向下转型子类转型成父类是向上转型反过来说父类转型成子类就是向下转型。但是向下转型可能会带来一些问题我们可以说麻雀是鸟但不能说鸟就是麻雀。来看下面的例子A类A的子类BC类从上面的代码我们可以得出这样一个结论向下转型需要使用强制转换。运行C程序控制台将输出其实黑体部分的向下转型代码后的注释已经提示你将发生运行时错误。为什么前一句向下转型代码可以而后一句代码却出错这是因为a1指向一个子类B的对象所以子类B的实例对象b1当然也可以指向a1。而a2是一个父类对象子类对象b2不能指向父类对象a2。那么如何避免在执行向下转型时发生运行时ClassCastException异常使用5.7.7节学过的instanceof就可以了。我们修改一下C类的代码这样处理后就不用担心类型转换时发生ClassCastException异常了。感谢阅读希望能帮助到大家谢谢大家对本站的支持原文链接http://blog.csdn.net/qq_35101189/article/details/57417933