想象一个类Cottage 扩展 Building和代码
Building building = new Building();
Cottage cottage = (Cottage)building;
现在,考虑到 java 继承的性质,不能将Building转换为Cottage是完全有道理的,但是(对我而言)没有意义的是它可以编译。为什么它编译然后抛出运行时ClassCastException?
在实际运行程序之前building是对Building对象的引用,这不是很明显吗?
作为一个普遍的问题,我知道我可能会得到一个重复的问题:) 但我找不到为什么它编译问题的答案:)
EDIT2我在这里接受了一个很好的答案(更不用说下面的讨论了:)),但我仍然发现在Java 转换中接受的答案导致运行时错误而不是编译错误是最有趣的......
编辑我编辑了IllegalCastException并放置了正确的ClassCastException