有三个班级。其中一个是父类,其他是子类。例如:
父类:Parent
子类:SubClass1, SubClass2
我的问题是如何在没有类型转换异常的情况下将SubClass1对象转换为SubClass2对象?
答案 0 :(得分:2)
你不能,除非你在它们之间创建一个is-a关系。不能将兄弟类型实例强制转换为彼此。
您必须执行以下操作:
SubClass2 extends Parent
SubClass1 extends Subclass2
现在都从Parent
继承,你可以写
Subclass2 obj = new Subclass1();
或反过来。
答案 1 :(得分:1)
你不能这样做,因为SubClass1
可能有SubClass2
没有的成员,反过来。
答案 2 :(得分:1)
假设父级是Fruit
,子类是Banana
和Apple
。您问的是如何将Banana
变成Apple
?你不能。香蕉不是苹果。例外情况就是告诉你。
答案 3 :(得分:1)
您可以伪造编译器但运行时可以确保获得ClassCastException
答案 4 :(得分:1)
你不能,也不会真的有意义。想象一下,你的父类是“动物”,子类1是大象,而子类2是鼠标,你要问的是一种看大象的方式,就好像它是一只老鼠。
答案 5 :(得分:1)
实际上它是可能的!! 如果您不关心新对象中的数据丢失。
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;
}
在这种情况下,我们只是忽略 C 和 D 。我认为设置几个字段(A,B)是可以的,但对于许多字段(A-Z)没有好处,甚至父母也有很多字段的父...
我也在寻找更好/更优雅的解决方案,比如“复制父类对象的所有字段”,因为有时我们确实希望重用< / strong>现有对象的数据。
==更新==
Apache BeanUtils :copyProperties(Object,Object)可能会有所帮助。