Java中向上转型和向下转型问题

 W蓝尾蝶SUH_435 发布于 2022-10-28 08:53
先上代码:UpDownFather.java文件 
package test;

public class UpDownFather {
    public static void main(String args[]) {
        UpDownFather upDownFather = new UpDown();
        UpDown upDown = (UpDown) upDownFather;
        System.out.println(upDown.hashCode());
    }
}
类:UpDown.java文件
package test;

public class UpDown extends UpDownFather {
    public static void main(String args[]) {
        UpDown upDown = new UpDown();
        // 父类可以接收子类
        UpDownFather upDownFather = (UpDownFather) upDown;
        System.out.println(upDownFather.hashCode());
    }
}
上述两种方式,都会编译运行通过。但是下面这种方式,编译通过,运行抛异常:
package test;

public class UpDownFather {
    public static void main(String args[]) {
        UpDownFather upDownFather = new UpDownFather();
        UpDown upDown = (UpDown) upDownFather;
        System.out.println(upDown.hashCode());
    }
}


順便問一下,我提出的問題,如何格式化代碼?有點兒格式混亂啊。
8 个回答
  • 向上转型是不需要做强转操作的,向下转型是要先instanceof判断下是不是你要的对象,如果是才可以强转,要不然就可能抛出CastObjectException.

    2022-10-29 11:31 回答
  • class A{
    
    }
    
    class B{
    
    }
    
    class Main{
        static Object a = new A();
        static B b = (B)a;
    
        public static void main(String[] args) {
            System.out.println(b.hashCode());
        }
    }

    楼主这种方式编译也不会有问题。

    2022-10-29 11:33 回答
  • 向下转型当然可以,但是安全地做法是先用instanceof判断一下。

    2022-10-29 11:40 回答
  • 向下转型是不支持的,猫是一种动物,但动物不是一种猫
    对象的实质以调用的构造方法为依据,即new左值只是具有限定/封装功能的作用。

    2022-10-29 11:42 回答
  • 子类能转换成父类,无需强制转换。
    父类无法转换成子类,即便加上强制转换,运行时还是会抛出类匹配错误。

    2022-10-29 11:46 回答
  • upDownFather这个对象本身就不是UpDown类型的,改成下面这样就行了

    UpDownFather upDownFather = new UpDown();
    UpDown upDown = (UpDown) upDownFather;
    System.out.println(upDown.hashCode());

    强制类型转换的时候,目标类型必须是该对象的真实类型或者父类才可以,
    这里UpDown类型不是upDownFather对象的真实类型,也不是upDownFather的父类类型,所以会失败。

    2022-10-29 11:48 回答
  • 你没有把两个类之间的关系说出来,所以不是很清楚。格式化代码的话 eclipse 使用 Ctrl+shift+f 格式化代码,注意搜狗会占用快捷键,intellij idea Windows 我忘记了,在 mac 下使用 alt+command+L

    2022-10-29 11:49 回答
  • 2022-10-29 11:52 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有