Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从通用抽象类扩展而来的Java类之间的转换_Java_Casting_Abstract - Fatal编程技术网

从通用抽象类扩展而来的Java类之间的转换

从通用抽象类扩展而来的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{ ... } 公家犬{

我有一个有趣的情况,EMF迫使我:

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没有什么不好的。钻石问题特别是一个面向对象的问题。