所以我有3节课。
base
derived1
派生自base
derived2
派生自base
这段代码说,即使我已经将derived1转换为基础对象,也不能将derived1转换为derived2?
base temp = (derived2)((base)derived1);
我正在尝试将derived1转换为derived2对象。这是我能提出的唯一解决方案,这有效吗?有没有其他方法来实现这一目标?谢谢!
答案 0 :(得分:2)
你做不到。你最终只能得到ClassCastException
。
如果你的方法是base
的非最终方法(可能在子类中被覆盖),那么你可以将它们都转换为base
并以这种方式调用它。
您也可以正确使用接口来代表常用功能。
Java提供的唯一动态绑定方式是通过反射(tutorial,还有java.lang.Class
documentation),例如:
myObject.getClass().getDeclaredMethod("display").invoke(myObject);
请记住,在使用反射时,您将失去编译时类型检查的所有好处(并且界面也更加繁琐) - 几乎始终是完成任务的更好方法没有它(在你的情况下,我有一种预感,绝对是更好的方式)。
答案 1 :(得分:2)
通常,代码表示设计问题。确保derived1
和derived2
' 是' base
,拜托。
香蕉如何变成橙色?