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

Java 从另一个子类对象创建子类对象,java,Java,有三节课。其中一个是父类,另一个是子类。例如: 父类:Parent 子类:子类1,子类2 我的问题是,如何在没有类型转换异常的情况下将子类1对象转换为子类2对象?您不能,除非您在它们之间创建is-a关系。兄弟类型实例不能相互强制转换 您必须执行以下操作: SubClass2 extends Parent SubClass1 extends Subclass2 现在,两者都从父级继承,您可以编写 Subclass2 obj = new Subclass1(); 或者反过来做 你不能这样做,因为

有三节课。其中一个是父类,另一个是子类。例如:

父类:
Parent

子类:
子类1,子类2


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

您不能,除非您在它们之间创建is-a关系。兄弟类型实例不能相互强制转换

您必须执行以下操作:

SubClass2 extends Parent
SubClass1 extends Subclass2
现在,两者都从父级继承,您可以编写

Subclass2 obj = new Subclass1();

或者反过来做

你不能这样做,因为
子类1
可能有一个
子类2
没有的成员,反之亦然。

说父类是
水果
,子类是
香蕉
苹果
。你在问如何把香蕉变成苹果?你不能。香蕉不是苹果。异常正好告诉您这一点。

您可以伪造编译器,但运行时您可以确保获得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;
}
在这种情况下,我们只需忽略CD。我认为设置几个字段(a,B)是可以的,但对很多字段(a-Z)没有好处,甚至父级也有很多字段的父级

我也在寻找更好/优雅的解决方案,比如“复制父类对象的所有字段”,因为有时我们确实希望重用现有对象的数据

==更新==


Apache BeanUtils:copyProperties(对象,对象)可能会有帮助。

是的,我知道。我想也许,一个超类对象是由第一个子类对象创建的,而不是由第二个子类对象创建的。这个超类是的,这就是我想要的答案。。谢谢你@TudorYes我会的,但我必须等五分钟,因为stackoverflow规则:)是的,我知道。我想也许,一个超类对象是由第一个子类对象创建的,而第二个子类对象是由这个超类创建的