【发布时间】:2018-12-04 20:25:59
【问题描述】:
我正在学习 JAVA Programmer I 证书,但其中有一个我无法理解的问题:
//Given:
interface I{}
class A implements I{}
class B extends A {}
class C extends B{}
//and
A a = new A();
B b = new B();
确定将编译和运行而不会出错的选项。
A. a = (B)(I)b;
B. b = (B)(I)a;
C. a = (I)b;
D. I i = (C)a;
现在我知道答案是A)但我不明白,如果B类是A类的孩子,那么'a'可以等于'b'而不用强制转换,为什么答案是B ) 错误的?连铸 (B)(I) 是什么意思?
【问题讨论】:
-
这样看,所有 B 都是 A,但并非所有 A 都是 B。在这个例子中,只有 B 扩展了 A,但可能有一个新的类 Z 扩展 A,它将是 A,但不会是一个乙