【发布时间】:2018-10-05 05:05:13
【问题描述】:
public static void main(String[] args) {
new Redwood().go();
}
void go() {
go2(new Tree(), new Redwood());
go2((Redwood) new Tree(), new Redwood());
}
void go2(Tree t1, Redwood r1) {
Redwood r2 = (Redwood)t1;
Tree t2 = (Tree)r1;
}
}
给定类 Redwood extends Tree,main() 方法在 Redwood 中,Tree 是一个只有默认构造函数的空类;这个考试问题的答案是“当代码尝试将 Tree 向下转换为 Redwood 时,将引发 ClassCastException。”
我想知道抛出异常的原因和位置。根据我的理解,您可以声明 Tree t1 = new Redwood() 那么为什么我不能直接将 Tree 转换为 Redwood?
【问题讨论】:
-
因为每只腊肠犬都是狗,但不是每只狗都是腊肠犬。
-
@Loc 为什么不是“Java 转换规则”?它是在 JLS 中定义的,所以它是 Java,它是规则,它是关于强制转换的。
标签: java class inheritance casting polymorphism