//父类
 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啊???想不明白另外,强制转换到底有什么作用?
多态的时候应该是进行了自动转型吧,那么强制转换在这里又起什么作用??
难道只能是给父类一个子类的引用,然后再将这个引用交给子类??强制转换还有其它的用处吗???

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【webregister】截止到2008-07-06 17:11:44的历史汇总数据(不包括此帖):
    发帖的总数量:9                        发帖的总分数:390                      
    结贴的总数量:4                        结贴的总分数:160                      
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:5                        未结的总分数:230                      
    结贴的百分比:44.44 %               结分的百分比:41.03 %                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    楼主该结一些帖子了
      

  2.   

       Father fat=(Father)new Son();
    强制转换到超类型是没有意义的。
      

  3.   

    这是因为你的域变量i是public的,多态只是对方法,不是对域变量
    如果你把Class Son中的getI()方法改为
    System.out.println("son i="+super.i);
    就会输出10了
      

  4.   

    好像继承是将父类中除了private 之外的变量和方法都会继承吧??Father类引用Son实例,那么Son的变量也应该可以访问啊
      

  5.   

    这里打印的是Father的i
    具体解释请看我的这篇blog
    http://blog.csdn.net/yirentianran/archive/2008/04/25/2327349.aspx
    另外 Father fat=(Father)new Son();
    和 Father fat=new Son();
    向上造型是自动转换的
    不用强制转换
      

  6.   

    对于6楼的
    和 Father fat=new Son(); 
    向上造型是自动转换的 
    不用强制转换

    我认同,
    对于Father fa=new Son();的书写,本人认为"儿子“是父亲的,从父亲身上只能看到有这个儿子,但是你要是想fa.i时,就只是父亲他的特征,儿子没有给父亲身上贴上自己的特征!