详细说下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
我觉得也会产生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
就好像放到Hashmap里的对象都会转型成Object,但是还是可以转换回来
强行转换为Delta会报错
那
D. 把(Alpha)x //已转换为Alpha
再转为Beta不会报错么?
能说的再详细点么?或者说直接点?
到底会不会产生Exception呢?
一旦出现这种情况可能就会产生ClassCastException
以上只是我的猜测 具体情况还请详查
在x转换为Alpha类型时没问题,但是再次转换Beta类型时会出错
就像B选项中: B. Foo f= (Delta)x;
x向下转换为Delta类型时会出错。
本题中对象是用Beta转换的,因此,无论你用它的任何父类封装,他的类型都是Beta
因为Beta是Alpha的子类,因此我们可以说x是Beta的对象,也可以说x是Alpha的对象,也可以说x是Object的对象。你把一个Beta的对象转换成Beta的类型是不会出错的