如何在Java中将父项转换为子项

lik*_*kaa 3 java oop inheritance class parent

我正在这样做:

Child child = (Child)parent;
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误,我发现不可能这样做。我不知道为什么,但是我认为应该可行,如果Childclass继承自Parentclass,则其中包含Parent对象数据。

我的问题是:

  • 为什么它不起作用?


  • 我如何做这项工作,而无需像这样设置每个单亲的属性

class Parent{
    public int parameter1;//...
    public int parameter1000;
}

class Child extends Parent
{
    public Child(Parent parent)
{
        this.parameter1 = parent.parameter1;//...
        this.parameter1000 = parent.parameter1000;
}
}
Run Code Online (Sandbox Code Playgroud)

Aka*_*ury 5

好吧,你可以做:

Parent p = new Child();
// do whatever
Child c = (Child)p;
Run Code Online (Sandbox Code Playgroud)

或者,如果您必须从纯父对象开始,则可以考虑在父类中有一个构造函数并调用:

class Child{
    public Child(Parent p){
        super(p);
    }
}
class Parent{
    public Parent(Args...){
        //set params
    }
}
Run Code Online (Sandbox Code Playgroud)

或组成模型:

class Child {
    Parent p;
    int param1;
    int param2;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可以直接设置父项。

您也可以使用Apache Commons BeanUtils执行此操作。使用其BeanUtils类,您可以访问许多实用程序方法以通过反射来填充JavaBeans属性。

要将所有公共/继承的属性从父对象复制到子类对象,可以使用其静态copyProperties()方法,如下所示:

BeanUtils.copyProperties(parentObj,childObject);
Run Code Online (Sandbox Code Playgroud)

但是请注意,这是一项繁重的操作。