Inheritance 强制转换一个变量,不确定它为什么会给出ClassCastException

Inheritance 强制转换一个变量,不确定它为什么会给出ClassCastException,inheritance,casting,Inheritance,Casting,我们有以下代码: 我们有这样的指示: mySub = (SubClass) mySuper; 对我来说,这看起来像一个合法的演员,但它给了一个ClassCastException。为什么会这样 从Oracle文档 抛出,指示代码试图将对象强制转换为它不是实例的子类。例如,以下代码生成ClassCastException: Object x = new Integer(0); System.out.println((String)x); Eg: Object x = new Intege

我们有以下代码:

我们有这样的指示:

mySub = (SubClass) mySuper;
对我来说,这看起来像一个合法的演员,但它给了一个ClassCastException。为什么会这样

从Oracle文档

抛出,指示代码试图将对象强制转换为它不是实例的子类。例如,以下代码生成ClassCastException:

 Object x = new Integer(0);
 System.out.println((String)x);

Eg:  Object x = new Integer(0);         //works fine 
     String s = (String)x;      //Will raise an exception here as Object 
                                    is not a subclass of String.

您可以将子类的实例强制转换为其超类,但不能将子类的实例强制转换为其超类。@RobbyCornelissen,例如mySuper=superclass mySub?只要Super引用子类对象,从Super向下转换到Sub就可以了。在本例中,Super引用一个Super对象。。如果你不得不沮丧,那就打字吧check@Michiel确实是。@Lewsterin我的评论是关于底层实例的,你的是关于引用类型的。