从通用抽象类扩展而来的Java类之间的转换
我有一个有趣的情况,EMF迫使我:从通用抽象类扩展而来的Java类之间的转换,java,casting,abstract,Java,Casting,Abstract,我有一个有趣的情况,EMF迫使我: abstract class AbstractDog{ ... } public class Dog extends AbstractDog{ < implemented code > } public class DogTemplate extends AbstractDog{ < implemented code identical to Dog > } 抽象类AbstractDog{ ... } 公家犬{
abstract class AbstractDog{
...
}
public class Dog extends AbstractDog{
< implemented code >
}
public class DogTemplate extends AbstractDog{
< implemented code identical to Dog >
}
抽象类AbstractDog{
...
}
公家犬{
}
公共类DogTemplate扩展了AbstractDog{
<实现的代码与Dog相同>
}
Dog和DogTemplate中的代码完全相同(不要问——我们的系统非常依赖Eclipse,这是唯一的方法)。我需要从DogTemplate转换成Dog,但是当我执行Dog d=(Dog)dogTemplateInstance
时,会得到java.lang.ClassCastException
。我完全理解为什么会发生这种异常,所以请不要麻烦告诉我为什么
我需要知道的是,是否有任何方法可以利用两个类之间的共同祖先关系来实现此转换?无法将
狗模板
转换为狗模板
,因为狗模板
甚至不扩展狗模板
。只有狗的实例才能投射给狗
如果可能的话,您可以使用构造函数创建一个新的Dog实例,该构造函数将DogTemplate的所有字段复制到Dog。或者您可以对这两个类使用一个公共接口。使dog和dogTemplate实现相同的接口。在此界面中,声明狗的公共契约/行为
那么,您将能够在C++中提交DOGTMADS-IDOG.
,这个功能称为java中不可用的多重继承。多重继承。。我面向对象的心开始流血:)@Marc关于MI没有什么不好的。钻石问题特别是一个面向对象的问题。