看看这个面试题!!!!
1.public   class   test{ 
 2.   public   static   void   main(String   args[]){ 
 3.         class   Foo{ 
 4.                     public   int   i=3; 
 5.   } 
 6.      Object   o=(Object)new   Foo();          
 7.         Foo   foo=(Foo)o;         
 8.   System.out.println( "i= "+foo.i); 
    9.      } 
 10.} 
 A.i=3;B.Compilation   fails; 
 C.A   
ClassCastException   is   throw   at   line   6 
 D..A   ClassCastException   is   throw   at   line   6 
 选那个答案呢      并说明原因。 
 另外   java异常有那些类型????
------解决方案--------------------我没有运行,不过先说一下我的想法 
 Object o=(Object)new Foo();    
 这个强制转型,会丢失Foo 类的i的信息 
 然后又吧Object 转换为Foo类型,在输出foo.i的时候由于前面已经丢失i的信息,所以会编译错误
------解决方案--------------------楼上强制转换为什么会丢失Foo的i的信息?
------解决方案--------------------Object是任何class的最终父类,你这样强制转化只不过是把他的父类指针指向它,并不会丢失原来地任何数据,只不过在Object o=(Object)new Foo();的时候,你无法取得i罢了,但在new Foo()的实际内存中,并为改变任何数据,所以,Foo foo=(Foo)o; 再用Foo foo指针指向这块内存的时候,i保持不变。所以,编译正常,i=3。
------解决方案--------------------俺同意楼上说法~~
------解决方案--------------------编译正常,i=3!
------解决方案--------------------(Object是任何class的最终父类,你这样强制转化只不过是把他的父类指针指向它,并不会丢失原来地任何数据,只不过在Object o=(Object)new Foo();的时候,你无法取得i罢了)   
 请问为什么父类指针指向它却无法取得i的值?   
 原因是父类对象引用的变量一定是父类的,而父类即Object中没有定义变量i,自然无法取到了
------解决方案--------------------可以在 
 ================= 
 6.  Object o=(Object)new Foo();    
 7.   Foo foo=(Foo)o; 
 ================= 
 中间输出i,看看i的值 
------解决方案--------------------关注
------解决方案--------------------i =3 ! 关于内部类的问题! 
   内部类的方法可以访问,该类定义所在类(外围类)的作用域中的数据,包括private的数据.对于其他类,该类被隐藏.   
 关于强制类型转换的问题: 
  在继承上,一个superClass变量既可以引用一个superClass对象,也可以引用一个subClass对象.反之不可以.强制类型转换只是暂时忽略对象的实际类型,使用对象的全部功能.
------解决方案--------------------i始终存在 只不过Object o=(Object)new Foo(); 这句后对于o来说子类里的i是“不可见的”但只是“暂时的不可见” i并没有丢失(相当于用手遮住了白纸上的东西 只是让你看不见 但纸上写的东西还在) 当 Foo foo=(Foo)o; 这句后foo又转会了Foo所以对于foo来说i是“可见的”(相当于把之前遮在纸上的手移开了 当然就能看到纸上写的什么了)  因此System.out.println( "i= "+foo.i);这句会正常输出i=3
------解决方案--------------------此题如果考察类型转换。 
 public class ClassCastExceptionextends 
RuntimeException当试图将对象强制转换为不是实例的子类时,抛出该异常。例如,以下代码将生成一个 ClassCastException:      
      Object x = new Integer(0); 
      System.out.println((String)x); 
 这道题正确输出i=3;如果换成下面的情况,就会发生异常了。 
         class Foo1{ 
             public int i = 4; 
         } 
         class Foo { 
             public int i = 3; 
         } 
         Object o = (Object) new Foo1(); 
         Foo foo = (Foo) o;   
         System.out.println( "i= " + foo.i); 
     }
------解决方案--------------------不知道哪里存在丢失的问题 
 这个题目考察了2个方面: 
 1.内部类的创建 
 2.类型转换(Object是一切类的父类) 
------解决方案--------------------