从另一个子类对象创建子类对象

时间:2011-12-10 21:46:58

标签: java

有三个班级。其中一个是父类,其他是子类。例如:

父类:Parent

子类:SubClass1, SubClass2

我的问题是如何在没有类型转换异常的情况下将SubClass1对象转换为SubClass2对象?

6 个答案:

答案 0 :(得分:2)

你不能,除非你在它们之间创建一个is-a关系。不能将兄弟类型实例强制转换为彼此。

您必须执行以下操作:

SubClass2 extends Parent
SubClass1 extends Subclass2

现在都从Parent继承,你可以写

Subclass2 obj = new Subclass1();

或反过来。

答案 1 :(得分:1)

你不能这样做,因为SubClass1可能有SubClass2没有的成员,反过来。

答案 2 :(得分:1)

假设父级是Fruit,子类是BananaApple。您问的是如何将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)可能会有所帮助。