转换派生到base,然后将其转换为另一个派生的。 Java的

时间:2014-03-12 02:06:12

标签: java casting downcast

所以我有3节课。

base

derived1派生自base

derived2派生自base

这段代码说,即使我已经将derived1转换为基础对象,也不能将derived1转换为derived2?

base temp = (derived2)((base)derived1);

我正在尝试将derived1转换为derived2对象。这是我能提出的唯一解决方案,这有效吗?有没有其他方法来实现这一目标?谢谢!

2 个答案:

答案 0 :(得分:2)

你做不到。你最终只能得到ClassCastException

如果你的方法是base的非最终方法(可能在子类中被覆盖),那么你可以将它们都转换为base并以这种方式调用它。

您也可以正确使用接口来代表常用功能。

Java提供的唯一动态绑定方式是通过反射(tutorial,还有java.lang.Class documentation),例如:

myObject.getClass().getDeclaredMethod("display").invoke(myObject);

请记住,在使用反射时,您将失去编译时类型检查的所有好处(并且界面也更加繁琐) - 几乎始终是完成任务的更好方法没有它(在你的情况下,我有一种预感,绝对是更好的方式)。

答案 1 :(得分:2)

通常,代码表示设计问题。确保derived1derived2' ' base,拜托。

香蕉如何变成橙色?

相关问题