为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

富国沪深 2019-03-12 13:19:48
先上代码: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());    }}順便問一下,我提出的問題,如何格式化代碼?有點兒格式混亂啊。
查看完整描述

7 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

https://img1.sycdn.imooc.com//5cb82b3c000165f508000340.jpg

查看完整回答
反对 回复 2019-04-18
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

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


查看完整回答
反对 回复 2019-04-18
?
繁花如伊

TA贡献2012条经验 获得超12个赞

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


UpDownFather upDownFather = new UpDown();

UpDown upDown = (UpDown) upDownFather;

System.out.println(upDown.hashCode());

强制类型转换的时候,目标类型必须是该对象的真实类型或者父类才可以,

这里UpDown类型不是upDownFather对象的真实类型,也不是upDownFather的父类类型,所以会失败。


查看完整回答
反对 回复 2019-04-18
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

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

查看完整回答
反对 回复 2019-04-18
?
月关宝盒

TA贡献1772条经验 获得超5个赞

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


查看完整回答
反对 回复 2019-04-18
?
米脂

TA贡献1836条经验 获得超3个赞

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());

    }

}

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


查看完整回答
反对 回复 2019-04-18
  • 7 回答
  • 0 关注
  • 738 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信