Java中向上转型和向下转型问题
ringa_lee
ringa_lee 2017-04-17 17:53:21
[Java讨论组]
先上代码: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());
    }
}


順便問一下,我提出的問題,如何格式化代碼?有點兒格式混亂啊。
ringa_lee
ringa_lee

ringa_lee

全部回复(8)
PHP中文网

天蓬老师

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

黄舟

upDownFather这个对象本身就不是UpDown类型的,改成下面这样就行了

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

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

巴扎黑

子类能转换成父类,无需强制转换。
父类无法转换成子类,即便加上强制转换,运行时还是会抛出类匹配错误。

PHP中文网

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

PHP中文网

向下转型当然可以,但是安全地做法是先用instanceof判断一下。

PHP中文网
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());
    }
}

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

PHP中文网

向上转型是不需要做强转操作的,向下转型是要先instanceof判断下是不是你要的对象,如果是才可以强转,要不然就可能抛出CastObjectException.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号