gpt4 book ai didi

java - 当代码尝试将 Tree 向下转换为 Redwood 时,将抛出 ClassCastException

转载 作者:行者123 更新时间:2023-11-30 07:43:07 24 4
gpt4 key购买 nike

在下面的代码中,在第 7 行,当我们将 Tree 向下转换为 Redwood 时,没有错误,但为什么在将 Tree 向下转换为 Redwood 时,在第 10 行出现运行时错误

public class Redwood extends Tree {
public static void main(String[] args) {
new Redwood().go();
}
void go() {
go2(new Tree(), new Redwood());
go2((Redwood) new Tree(), new Redwood());// no error here
}
void go2(Tree t1, Redwood r1) {
Redwood r2 = (Redwood)t1;// runtime error here
Tree t2 = (Tree)r1;
}
}
class Tree { }

最佳答案

好吧,虽然 Redwood 实例始终是 Tree 实例,但并非所有 Tree 实例都是 Redwood 。当您创建 Tree 实例(使用 new Tree())时,它肯定不是 Redwood 实例,并且不能转换为 红木

Redwood r2 = (Redwood)t1;t1 不是 Redwood 时,会抛出 ClassCastException。在第一次调用 go2 时,第一个参数是 new Tree(),它不是 Redwood

哦,您在这里看到错误的原因 - Redwood r2 = (Redwood)t1; (第 10 行)而不是第 7 行 (go2((Redwood) new Tree( )、new Redwood());) 是第 10 行首先执行,在第一次调用 go2() 时(第 6 行)。如果您对第 6 行进行注释,您将在第 7 行中得到异常。

关于java - 当代码尝试将 Tree 向下转换为 Redwood 时,将抛出 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34379021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com