我在相互转换类时遇到问题。
要更详细地解释它,请查看此图片。
在我的代码中,我执行SkillBase s = new SkillBase();
,然后在该类中设置一些值。
然后我尝试执行 Subclass sub = (Subclass)s;
但运行时它给出了 ClassCastException。
我添加了一个小的调试部分,它检查 instanceof
是否返回 true。
我尝试过谷歌,也在这里看到了一些问题并阅读了它们(他们都没有适合我的答案)
那么,我该怎么办?
最佳答案
SkillBase
不是 Subclass
的实例,那么您为什么认为强制转换会起作用呢?试试这个:
SkillBase s = new Subclass();
Subclass sub = (Subclass)s;
这将会成功。另外,我认为您对 instanceof
的看法是不正确的,我确信:
s instanceof Subclass
在上面的代码中产生true
,但在您的情况下产生false
。
从现实世界的角度思考:您始终可以将 Dog
转换为 Animal
,因为每只狗都是动物*,但转换 Animal
到 Dog
可能会失败,因为有些动物不是狗。
* 事实上,编译器会为你做到这一点,这就是所谓的多态性
关于java - Java 中的类转换异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9038519/