微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 编译时和运行时的Downcasting / Upcasting错误?

请检查以下程序.

我怀疑编译器何时会在编译器级别发出转换异常以及什么时候它将在运行时?

喜欢下面的程序,表达

我假设(Redwood)新的Tree()应该在编译时失败,因为Tree不是Redwood.但它在编译时没有失败,正如预期的那样在运行时失败!

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());
     }
     void go2(Tree t1,Redwood r1) {
         Redwood r2 = (Redwood)t1;
         Tree t2 = (Tree)r1;
     }
 }
 class Tree { }

解决方法

编译器只会查看表达式的编译时类型.它不对表达式的运行时类型进行假设. new Tree()有编译时类型Tree,所以(Redwood)new Tree()与(Redwood)myTreeVariable没什么区别.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐