2011-12-10 190 views
2

有三个类。其中一个是父类,另一个是子类。例如:从另一个子类对象创建子类对象

父类:Parent

子类:SubClass1, SubClass2

我的问题是,我怎么能转换SubClass1对象为SubClass2对象没有类型转换异常?

回答

2

你不能,除非你在他们之间创建一个is-a关系。同胞类型的实例不能互相转换。

你将不得不做这样的事情:

SubClass2 extends Parent 
SubClass1 extends Subclass2 

现在无论从Parent继承,你可以写

Subclass2 obj = new Subclass1(); 

或者做相反。

+0

是的,我知道。我想也许,一个超类对象被创建的第一个子类对象比第二个子类对象创建的这个超类 – olyanren

+0

是的,这是我正在寻找的答案..谢谢@Tudor – olyanren

+0

不要忘记接受答案,如果它帮助你。 :) – Tudor

1

你不能这样做,因为SubClass1可能有一个成员SubClass2不会,反之亦然。

+0

是的,我知道。我想也许,一个超级类对象被创建的第一个子类对象比第二个子类对象创建的这个超类 – olyanren

1

说父母是Fruit,子类是BananaApple。你在问如何将Banana变成Apple?你不能。香蕉不是一个苹果。唯一的例外就是告诉你。

1

您可以伪造的编译器,但你放心让ClassCastException异常

1

你不能,那就不是真正意义的运行时间。想象一下,你的父类是“动物”,子类1是大象,而子类2是鼠标,你要求的方式是将大象看作是一只老鼠。

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; 
} 

在这种情况下,我们简单地忽略Çd。我认为可以设置几个字段(A,B),但对许多字段(AZ)没有好处,或者甚至父母有许多字段的父...

我还在寻找更好/优雅的解决方案,类似于“复制父类对象的所有字段”,因为有时我们想要重用现有对象的数据。

== == UPDATE

阿帕奇BeanUtils的:copyProperties(对象,对象)可能是有益的。