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;答案是选B~~~但是不太明白为什么~~谁帮我讲解一下这个知识点~~谢谢了~~

解决方案 »

  1.   

    因为Alpha是Beta的父类,Beta实现了接口Foo,所以Beta转换成Alpha和Foo都不有问题。Delta 是Beta的子类,所以转换类型会出现异常B. Foo f= (Delta)x;中是首先把Beta的实例x转换成Delta,异常就是在这里抛出的
      

  2.   

    因为 x 是这样创建的, Beta x = new Beta(); 说明x实际上是 Beta 对象。答案 B :
     Foo f= (Delta)x; 是要把x先转型为 Delta , 但 Delta 是 Beta 的子类,任何对象都不能向子类转型。如果去掉 (Delta) 就对了:  Foo f= x;
      

  3.   

    x只是 Beta , 而不是Delta, 
    你强制把他转成子类,就会报那错,
    就像你可以人,可以是教师, 也可以同时是学生,
    但如果你只是个教师时,强说你是学生,这是不合理的,除非你同时即是老师,又是学生
    例子有点不当,不过还可以理解吧
      

  4.   

    谢谢各位的回答~~~
      我还想问一下~~按照2楼说的Foo f= (Delta)x;中是首先把Beta的实例x转换成Delta~~
        D选项Beta b = (Beta)(Alpha)x   是先把x转化成其父类Alpha然后再转换成Btea类的意思吗?
      

  5.   

    回复5楼的~~~我不是什么公司的~~现在还是大四学生~~在准备SCJP的考试~~
        同时也在找实习工作 
      

  6.   

    D. Beta b = (Beta)(Alpha)x; 
    恩~~~所以我想问一下D选项~~不也有一个父类向子类转换吗??
      

  7.   


    我看错了,Alpha是Belta的父类,没问题的
      

  8.   

    大四才学这东西,看来如今大学生的能力是每况愈下x = new Beta(); 
    实例化的是Beta类,根据向上转型原则,可以转成Foo,Alpha,唯独不可以转成Delta。所以选B
      

  9.   


    因为x本身就是Beta的对象,转成Alpha再转回来是没有问题的。因为x具有Beta类所具有的所有特征。假设有一只鸽子,我们说这只鸽子是只鸟是对的,说这只鸟是只鸽子也是对的,因为它确实是只鸽子。但是假设有只鸟我们不认识它是什么鸟,你却说它是鸽子就是错的了。例子不太准确,大概就是这意思 
      

  10.   

    事情的起因是源于下面这样的一则广告贴(目前幸运还没有被删除,可以链接成功): 
    http://topic.csdn.net/u/20081028/15/525f32df-6c53-4b46-b847-f04c6fc1faf4.html 事情的发展是在这个贴: 我在移动平台专区被封权限是为什么?这个要找谁? 
    http://topic.csdn.net/u/20081118/08/cf7d0af3-35cc-4fb7-9dc2-4567041b89e5.html?seed=1367941736 事情的最新进展是这样的: [抗议]对硬件/嵌入开发的某些版主武断,简单,粗暴的执法方式表示严重的抗议!  
    http://topic.csdn.net/u/20081119/11/bda8bc5d-98d0-45ee-a1c1-86209d7f121d.html?seed=1457200066 当小贩被野蛮城管打死后之CSDN版 
    http://topic.csdn.net/u/20081120/09/8af968cb-af00-4ddb-8604-dab1fb5421be.html?seed=613093649 我重申一下,我一直不是在为我发广告贴辩护,我是在为处理此事的过程中受到的不合理对待即wxf0204 武断,简单,粗暴加野蛮的方式执法的行为,就我看跟城官差不多,对残踏我作为CSDN网友尊严,无视我作为CSDN网友存在的言行进行回击,悍卫我作为CSDN网友所具有的最基本的权利,而且之前连一个申诉的地方都没有,也没有找到班主封ID,删除留言的规定!别人城管也不会第一次去执法看到有小贩就直接打死,也会先劝导,就第一次收了别人小贩的东西也会开个条说一下情况,开个清单,收了什么,什么时候来取,要受到何种处罚,你们这帮斑猪不通人性,看到小贩直接毙了,之前之后,不声不响,不闻不问,不通人性,比城管还城管...................
    而且还不知反省,以暴抑暴,导致事件恶性循环!大家注意抗议的主题,不是对删除贴子,封ID有异议,对此贴前已经说的很清楚,现在的问题是抗议某些斑猪或者大部分斑猪在处理此事时粗暴的方式,野蛮的态度,狭隘的思想,如果在封ID之前给予警告,封ID之后对被封ID用户说明情况如确认被封的具体原因,封的时间以及当前所犯事件的严重程度等,事情何以至此,现在某些斑主为撑面子,继续执迷不悟,一点服务意识都没有,只会摆淫威! 再者跟城管没得比,别人城管之前还有警告,收了东西之后还要开个单子,通知什么时候去取回,有什么处罚,你们的粗野方式就是直接毙了,一了百了,跟原始人一样,难不成CSDN都是这样,真没人性化,我看别的论坛都是有流程,有说明,有警告,有通知!而且应该还有申诉的渠道,不能一手遮天,一毙完事,一点服务意识都没有,只会摆淫威! 
    知会一下,举手之劳,别的论坛都这么做......你们不这么做就是不通人性.........你自己想下,你这样野蛮,我为何要惧怕你的淫威,你以为你是谁,做错事直接闷棍打死,真正怎么死的都不知,...........不给没有前科的人以任何机会,手段之残忍,心恨之至极...........令人发指........让人不服,还不让辩解.....................,一点服务意识都没有,只会摆淫威 
    一点服务意识都没有,只会摆淫威