| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 585 人关注过本帖
标题:求教两个关于对象转型的问题
只看楼主 加入收藏
cj_yang
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2012-12-28
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
求教两个关于对象转型的问题
1.java在对象转型中,父类引用指向子类对象时,不能调用子类对象的方法,当将其强制转化为子类引用时就可以调用了,可以告诉我在转化前,父类引用里装的是个怎样的地址吗?或者说是一个怎样的指针??,转型后呢??

2.关于instanceof操作符有点疑问,比如说Cat是Animal的子类,以下代码片段中:
public void f(Animal a) {
    if (a instanceof Cat) {
        Cat cat = (Cat)a;
    }
}
向方法中传入一个Cat对象,然后a instanceof Cat成立了后,为什么还要把a进行强制转化呢,为什么就不能把a当做是Cat的一个引用呢?

初学者,问的问题可能有点蛋疼,不要介意啊。。

   
搜索更多相关主题的帖子: public 
2013-03-19 22:10
ren829
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:15
帖 子:255
专家分:1174
注 册:2006-3-11
收藏
得分:10 
无论父类还是子类的引用里边装的地址都没有区别,都是指向赋值给它的对象。只不过再向下转型之前,a的类型是Animal ,而转型之后,cat的地址复制了a的地址,而cat是Cat类型的。因为java是传递的都是引用地址,所以引用所指向的对象其实并没有区别。

a instanceof Cat 表示的是 a指向的对象确实是 Cat类型,但是它说明的是 a所指向的对象本身是Cat,但是a不是 a这个引用是Animal,所以你再传递引用的时候依然要对它强制转型。

求指导,理解是否正确。
2013-03-19 23:38
shellingford
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:19
帖 子:228
专家分:1348
注 册:2010-8-9
收藏
得分:10 
Cat cat =new Cat();
Animal a=cat;

cat和 a都指向同一个内存地址,也就是说和变量类型无关。

为什么Animal a 不能调用Cat的方法呢?这个是java语法或者说是编译器的检查问题,实际上是可以调用的(参考反射,比较复杂)。
非要强制转换一下有2个好处,一个是代码可读性高,任何对象都是Object的子类,如果没有这样的限制,那么直接声明Object就可以调任何方法了
第二个也是告知程序员在类型转换时注意确定类型,如果一个Animal实例强转Cat是会抛出异常的。

2013-03-20 10:05
cj_yang
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2012-12-28
收藏
得分:0 
回复 2楼 ren829
你说的我能理解。。谢了。。
2013-03-20 20:48
cj_yang
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2012-12-28
收藏
得分:0 
回复 3楼 shellingford
可以问一下楼上说的是正确的吗,你这样说我理解不了啊。。。
2013-03-20 20:54
快速回复:求教两个关于对象转型的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028580 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved