提问人:Syed Noman Ahmed 提问时间:6/14/2022 更新时间:6/14/2022 访问量:101
Java 中的多重转换
Multiple casting in Java
问:
我知道一些关于Java如何执行强制转换的规则,但我无法弄清楚以下示例中的规则:
interface I {}
class A implements I {}
class B extends A {}
class C extends B {}
class DriverClass {
public static void main(String[] args) {
A a = new A();
B b = new B();
C c = new C();
a = (A)(B)(C)c; // line 1 - Valid
a = (A)(C)(B)c; // line 2 - Valid
a = (B)(A)(C)c; // line 3 - Valid
a = (B)(C)(A)b; // line 4 - Runtime error
a = (C)(B)(A)b; // line 5 - Runtime error
a = (C)b; // line 6 - Runtime error
}
}
有人可以解释为什么第 1 行到第 3 行是有效语句,而第 4 行到第 6 行会抛出 ClassCastException 的运行时错误吗?
答:
4赞
Dawood ibn Kareem
6/14/2022
#1
你的类声明说每个 C 都是 B,每个 B(包括 C)都是 A。
现在你引用了一个新的 C,所以它也是一个 B 和一个 A。这意味着您可以按任何顺序强制转换为三个类中的任何一个,并且不会出现错误。c
c
然后你引用一个新的 B,那不是 C。这意味着您可以毫无问题地将其转换为 A 或 B,但是一旦您尝试转换为 C,就会出现错误,因为引用的对象不是 C。b
b
b
评论
0赞
Syed Noman Ahmed
6/14/2022
谢谢达伍德。这个解释很有道理。
评论