先上代码: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贡献1789条经验 获得超10个赞
繁花如伊
TA贡献2012条经验 获得超12个赞
upDownFather这个对象本身就不是UpDown类型的,改成下面这样就行了
UpDownFather upDownFather = new UpDown();
UpDown upDown = (UpDown) upDownFather;
System.out.println(upDown.hashCode());
强制类型转换的时候,目标类型必须是该对象的真实类型或者父类才可以,
这里UpDown类型不是upDownFather对象的真实类型,也不是upDownFather的父类类型,所以会失败。
米脂
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());
}
}
楼主这种方式编译也不会有问题。
添加回答
举报
0/150
提交
取消