黑马程序员技术交流社区

标题: 关于类型提升 [打印本页]

作者: --_.Is’攸稀    时间: 2013-11-7 14:49
标题: 关于类型提升
感觉类型提升转换不是很理解,比如
Object t=new Object();
String s=(String)r;
到底为什么可以这样,帮忙详细解释下。


作者: ciowok    时间: 2013-11-7 14:53
因为任何类都继承于Object类,什么都是东西,String是东西,所以可以强转。
作者: 零下五度的水    时间: 2013-11-7 15:14
你可以把强制转换理解成一种特殊的不安全的多态机制
Object obj = new String();
这个是标准的多态,说标准是因为 String 是 Object 的子类
所以用 obj 对象调用 Object 类所有的属性和方法必然能在 String 类中找到,
而 (String) obj 就相当于 String obj = new Object();
这个语法上必然是有问题的,
因为 String 的属性和方法 Object 基本不可能全都有,要不就不是继承了,那是克隆
但是java api提供的方法里有很多是传入一个对象,做一些动作,然后返回该对象的Object类型的,
因为这本身是标准多态的表现,是安全的,但是返回的Object类型对象通常还是需要当做原类型使用,
所以Java提供了强制转换的机制,相当于告诉你,这个事我办不了,你自己看着办啊,
放心,出问题了会抛异常的,你自己去解决就好,我就不费心了

所以总结一下的话:强制转换机制是因为需求而创造的,产生的异常编译器无能为力,
所以属于RuntimeException的范畴一般在你可以确定对象本身的引用类型时使用,
如果无法确定,最好先加上 instanceof 判断:
if (obj instanceof String)
      String str = (String)obj




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2