为了账号安全,请及时绑定邮箱和手机立即绑定

两个都有错误,但为啥不一样?

两个都有错误,但为啥不一样?

qq_物非物_03332662 2017-08-11 10:03:46
Object obj = new Integer(100);String strVal = (String)obj;运行时异常:CalssCastExceptionInteger obj = new Integer(100);String strVal = (String)obj;语法错误“Object obj = new Integer(100);”和“Integer obj = new Integer(100);”有区别吗?
查看完整描述

4 回答

已采纳
?
turboburst

TA贡献26条经验 获得超15个赞

有区别,Object obj = new Integer(100); 中,对象obj的类型是Object, 这是位于顶层的类,是很宽泛概念的类,翻译过来就是,对象,由于所有类都是对象,所以是个很宽泛的概念。而Integer obj = new Integer(100);对象obj的类型是Integer,这就是说,obj的类型比较具体了。你的那个异常原因是:obj的类型是Object,它不能转换为String

顺便说一下,在使用new定义一个类的实例的时候,从右到左服从is a 原则,就是,右边的类型是否属于左边的范畴,如果属于,可以这么定义,否则是错误的,比如Object obj = new Integer(100);从语法上来说是对的,因为Integer是属于Object的,但是如果反过来,Integer obj = new Object();这就是错的了,因为Object并不是Integer的范畴。

查看完整回答
反对 回复 2017-08-12
?
lenz

TA贡献3条经验 获得超3个赞

面向对象的多态啊!基础不熟

查看完整回答
1 反对 回复 2017-08-12
?
我不是一颗星

TA贡献43条经验 获得超20个赞

“Object obj = new Integer(100);”和“Integer obj = new Integer(100);”有区别吗?
多态,父类引用指向子类对象
但是不能具有子类的属性
如果想使用子类的属性或方法
则需要强转
Integer integer = (Integer)obj;
然后就可以转换类型了

查看完整回答
反对 回复 2017-08-11
?
移动的红烧肉

TA贡献13条经验 获得超70个赞


一个是父类,一个是实现类,你说一样不一样

查看完整回答
反对 回复 2017-08-11
  • 4 回答
  • 1 关注
  • 1578 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信