【发布时间】:2016-09-09 04:44:20
【问题描述】:
所以我在研究一些 OCAJP JAVA 样题时,偶然发现了以下问题。
考虑以下代码。
interface I{ }
class A implements I{ }
class B extends A { }
class C extends B{ }
还有以下声明:
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 没有指向 B 类的对象。”
现在,我实际上去了 Eclipse 并写下了整个代码。 C 显然没有编译,而 D. 在运行时失败。 B. 至少用我的代码编译没有问题。我在这里错过了什么吗?还是这本书真的错了? 我实际放入 Eclipse 的代码是这样的:
public class Test{
public static void main (String[]args){
A a = new A();
B b = new B();
a=(B)(I)b;
b=(B)(I)a;
}
}
interface I{ }
class A implements I{ }
class B extends A { }
class C extends B{ }
【问题讨论】:
标签: java inheritance casting