有三个类。其中一个是父类,另一个是子类。例如:从另一个子类对象创建子类对象
父类:Parent
子类:SubClass1, SubClass2
我的问题是,我怎么能转换SubClass1对象为SubClass2对象没有类型转换异常?
有三个类。其中一个是父类,另一个是子类。例如:从另一个子类对象创建子类对象
父类:Parent
子类:SubClass1, SubClass2
我的问题是,我怎么能转换SubClass1对象为SubClass2对象没有类型转换异常?
你不能,除非你在他们之间创建一个is-a关系。同胞类型的实例不能互相转换。
你将不得不做这样的事情:
SubClass2 extends Parent
SubClass1 extends Subclass2
现在无论从Parent
继承,你可以写
Subclass2 obj = new Subclass1();
或者做相反。
你不能这样做,因为SubClass1
可能有一个成员SubClass2
不会,反之亦然。
是的,我知道。我想也许,一个超级类对象被创建的第一个子类对象比第二个子类对象创建的这个超类 – olyanren
说父母是Fruit
,子类是Banana
和Apple
。你在问如何将Banana
变成Apple
?你不能。香蕉不是一个苹果。唯一的例外就是告诉你。
您可以伪造的编译器,但你放心让ClassCastException异常
你不能,那就不是真正意义的运行时间。想象一下,你的父类是“动物”,子类1是大象,而子类2是鼠标,你要求的方式是将大象看作是一只老鼠。
其实这是可能的!如果您不关心新对象中的数据丢失,请参阅。
class Parent{
String A;
String B;
public String getA();
public String setA();
public String getB();
public String setB();
}
class SubClass1 extend Parent{
String C;
public String getC();
public String setC();
}
class SubClass1 extend Parent{
String D;
public String getD();
public String setD();
}
public SubClass1 convertTOSubClass2(SubClass2 obj2){
SubClass1 obj1 = new SubClass1();
obj1.setA(obj2.getA());
obj1.setB(obj2.getB());
...
return obj1;
}
在这种情况下,我们简单地忽略Ç和d。我认为可以设置几个字段(A,B),但对许多字段(AZ)没有好处,或者甚至父母有许多字段的父...
我还在寻找更好/优雅的解决方案,类似于“复制父类对象的所有字段”,因为有时我们想要重用现有对象的数据。
== == UPDATE
阿帕奇BeanUtils的:copyProperties(对象,对象)可能是有益的。
是的,我知道。我想也许,一个超类对象被创建的第一个子类对象比第二个子类对象创建的这个超类 – olyanren
是的,这是我正在寻找的答案..谢谢@Tudor – olyanren
不要忘记接受答案,如果它帮助你。 :) – Tudor