如果有可能在运行时成功,则在 Java 中允许向下转换。
孩子孩子=(孩子)父母;
编译器将允许这样做,因为在运行时“父”可能指“子”的一个实例。但它在运行时失败,因为“父”不是指“子”的实例,而是指“父”的实例。
让我们看看如果没有 ClassCastException 会发生什么:
假设您已按如下方式定义类:
class Parent {
void aMethod(){
}
}
class Child {
void bMethod(){
}
}
假设我们定义了这些语句,
1. Parent parent = new Parent();
2. Child child = (Child)parent;
3. child.bMethod();// we should be able to do this, because there should not be any issue executing methods defined in "Child" type with a reference variable of "Child" type.
但是最后一行是非法的,因为在我们的 Parent 类中不存在名为“bMethod”的方法,我们正在尝试执行一个甚至不存在的方法。希望这证明“ClassCastException”是合理的。
现在,让我们检查您修改后的代码:
1. Parent parent = new Parent();
2 Child child = new Child();
3. parent = child;
4. System.out.println(parent.color);
5. child=(Child)parent;
6. System.out.println(child.color);
这里的铸件
child=(Child)parent; // works as you expected, parent is now referring to an instance of "Child" according to the assignment "parent = child" at line no 3.
工作正常,因为“父”现在指的是“子”类的实例。因此,“child”引用变量现在仅引用“Child”的一个实例,运行时环境对此感到满意。