//父类
class Father{
public int i=10;
void getI(){
System.out.println("father i="+i);
}
}//子类
class Son extends Father{
public int i=100;
void getI(){
System.out.println("son i="+i);
}
}
class Fason{
public static void main(String[] args){ //向上自动转型
Father fa=new Son();
fa.getI(); //100
System.out.println(fa.i); //10
System.out.println(fa.getClass().getName()); //Son //强制转换
Father fat=(Father)new Son();
fat.getI();//100
System.out.println(fa.i);//10
System.out.println(fa.getClass().getName()); //Son
//强制转换的作用只能是这样???
Object o="test";
String str=(String)o;
System.out.println(str);
}
}
重点问,为什么System.out.println(fa.i);//10打印出来的都是10而不是100???
在继承的时候子类的变量i不是已经覆盖父类的变量i了吗?
通过反射得到的类名也是Son,应该就会打印出Son类中的变量i啊,为什么打印出来还是父类的i啊???想不明白另外,强制转换到底有什么作用?
多态的时候应该是进行了自动转型吧,那么强制转换在这里又起什么作用??
难道只能是给父类一个子类的引用,然后再将这个引用交给子类??强制转换还有其它的用处吗???
楼主【webregister】截止到2008-07-06 17:11:44的历史汇总数据(不包括此帖):
发帖的总数量:9 发帖的总分数:390
结贴的总数量:4 结贴的总分数:160
无满意结贴数:0 无满意结贴分:0
未结的帖子数:5 未结的总分数:230
结贴的百分比:44.44 % 结分的百分比:41.03 %
无满意结贴率:0.00 % 无满意结分率:0.00 %
楼主该结一些帖子了
强制转换到超类型是没有意义的。
如果你把Class Son中的getI()方法改为
System.out.println("son i="+super.i);
就会输出10了
具体解释请看我的这篇blog
http://blog.csdn.net/yirentianran/archive/2008/04/25/2327349.aspx
另外 Father fat=(Father)new Son();
和 Father fat=new Son();
向上造型是自动转换的
不用强制转换
和 Father fat=new Son();
向上造型是自动转换的
不用强制转换
我认同,
对于Father fa=new Son();的书写,本人认为"儿子“是父亲的,从父亲身上只能看到有这个儿子,但是你要是想fa.i时,就只是父亲他的特征,儿子没有给父亲身上贴上自己的特征!