详细说下Q5的D选项
我觉得也会产生CLASSCASTEXCEPTION啊。。
有点乱,帮忙缕缕,谢谢!
Given:
10. interface Foo {}
11. class Alpha implements Foo { }
12. class Beta extends Alpha {}
13. class Delta extends Beta {
14. public static void main( String[] args) {
15. Beta x = new Beta();
16. // insert code here
17. }
18. }
Which code, inserted at line 16, will cause a
java.lang.ClassCastException?
A. Alpha a = x;
B. Foo f= (Delta)x;
C. Foo f= (Alpha)x;
D. Beta b = (Beta)(Alpha)x;
Answer: B

解决方案 »

  1.   

    D不会,因为x本质上是Beta,尽管先转型成Alpha,但是还是可以转型成Beta
    就好像放到Hashmap里的对象都会转型成Object,但是还是可以转换回来
      

  2.   

    B. 把x //Beta型     
    强行转换为Delta会报错

    D. 把(Alpha)x //已转换为Alpha     
    再转为Beta不会报错么?
      

  3.   

    下转往往会产生问题(某些能力不具备)Delta b = (Delta)(Alpha)new Beta(); 
      

  4.   


    能说的再详细点么?或者说直接点?
    到底会不会产生Exception呢?
      

  5.   

    运行一下不就知道了 子类往往拥有一些父类不具备的能力
    一旦出现这种情况可能就会产生ClassCastException
    以上只是我的猜测 具体情况还请详查
      

  6.   

    其实我就是觉得D选项:   D. Beta b = (Beta)(Alpha)x;
    在x转换为Alpha类型时没问题,但是再次转换Beta类型时会出错
    就像B选项中:           B. Foo f= (Delta)x;
    x向下转换为Delta类型时会出错。
      

  7.   

    这么说吧,一个对象究竟是什么,取决于new的时候事用的是什么class
    本题中对象是用Beta转换的,因此,无论你用它的任何父类封装,他的类型都是Beta
    因为Beta是Alpha的子类,因此我们可以说x是Beta的对象,也可以说x是Alpha的对象,也可以说x是Object的对象。你把一个Beta的对象转换成Beta的类型是不会出错的