想象一个类 Cottage 扩展了 Building,并且有如下代码:
Building building = new Building();
Cottage cottage = (Cottage)building;
现在,考虑到Java继承的性质,Building无法转换为Cottage是完全有道理的,但对我而言不合理的是为什么这会编译。为什么它会编译然后抛出运行时的ClassCastException?
显然,在实际运行程序之前,building是对Building对象的引用,这不是很明显吗?
作为一个如此通用的问题,我知道我正在寻找可能的重复问题 :) 但我找不到关于“为什么会编译”这个问题的答案 :) 编辑2:我已经接受了一个很好的答案(更不用说下面的讨论了: )),但我仍然认为在Java转换导致运行时错误而不是编译错误中接受的答案最有趣... 编辑:我编辑了IllegalCastException并更正了为ClassCastException。
int x = 5 / 0
。 - gefei