首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

小弟我想问一下,为什么向上转型会成功?而向下转型不成功.请各位说一下其中的原理,多谢了

2012-01-29 
我想问一下,为什么向上转型会成功?而向下转型不成功.请各位说一下其中的原理,谢谢了.classA{voidjj(Bb){Sy

我想问一下,为什么向上转型会成功?而向下转型不成功.请各位说一下其中的原理,谢谢了.
class   A
{
void   jj(B   b)
{
System.out.println( "success ");
}
public   static   void   main(String   args[])
{
A   a=new   A();
B   b=new   B();
a.jj(a);//向下转型.失败!,我想问一下,为什么向上转型会成功?而向下转型不成功.请各位说一下其中的原理,谢谢了.
}
}
class   B   extends   A
{

}

[解决办法]
第一个问题
A为B的父类,不可以这么直接用的,
即使在这里a.jj(a);//
强制进行转换a.jj(B(a))也不行
打个比方说,动物类是哺乳动物类的父类,
你不可以说动物都是哺乳动物,所以不可以把一个动物强制转换成哺乳动物,
除非你一开始就知道它是哺乳动物
[解决办法]
第二个问题记不清楚了
好像是因为x是虽然是B类的实例,但它使用的是A类的引用
[解决办法]
可以强制转型:(B)x
不过向下比较危险,不建议使用
[解决办法]
第二个问题中B的age没有访问修饰符,默认是包内可访问的,A和B你是写在一个文件,所以是同一个包,但问题是B是A的子类,A在B出生前就出生了,A怎么会知道B里面有什么呢?main方法在A里面,同样就不知道了,你把main方法调到B里,应该就可以了。

热点排行