加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 05:10:23 所属栏目:Java 来源:网络整理
导读:请检查以下程序. 我怀疑编译器何时会在编译器级别发出转换异常以及什么时候它将在运行时? 喜欢下面的程序,表达 我假设(Redwood)新的Tree()应该在编译时失败,因为Tree不是Redwood.但它在编译时没有失败,正如预期的那样在运行时失败! public class Redwood e
请检查以下程序.

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

喜欢下面的程序,表达

我假设(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没什么区别.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读