在Java中从其父类复制字段

在Java中从其父类复制字段,java,inheritance,Java,Inheritance,我有一个关于Java类字段的问题 我有两个Java类:父类和子类 class Parent{ private int a; private boolean b; private long c; // Setters and Getters ..... } class Child extends Parent { private int d; private float e; // Setters and Getters

我有一个关于Java类字段的问题

我有两个Java类:父类和子类

class Parent{
    private int a;
    private boolean b;
    private long c;

    // Setters and Getters
    .....
}


class Child extends Parent {
    private int d;
    private float e;

    // Setters and Getters
    .....
}
现在我有了
父类的一个实例。有没有办法创建
子类的实例并复制父类的所有字段而不逐个调用setter

我不想这样做:

   Child child = new Child();
   child.setA(parent.getA());
   child.setB(parent.getB());
   ......
另外,
父级
没有自定义构造函数,我无法向其添加构造函数

请发表意见


非常感谢。

您可以将字段设置为受保护的,而不是私有的,并直接在子类上访问它们。这有帮助吗?

您可以创建一个接受父级的
子构造函数。但是在这里,您必须逐个设置所有值(但是您可以直接访问子属性,而无需设置)

有一种解决反射问题的方法,但这只会增加复杂性。
您不希望它只是为了保存一些输入。

您尝试过这样做吗?从技术上讲,您可以一个接一个地调用setter,但不需要知道它们的所有名称。

您尝试过使用apachelib吗

BeanUtils.copyProperties(child, parent)

您可以使用反射,我可以这样做,并且可以很好地为我工作:

 public Child(Parent parent){
    for (Method getMethod : parent.getClass().getMethods()) {
        if (getMethod.getName().startsWith("get")) {
            try {
                Method setMethod = this.getClass().getMethod(getMethod.getName().replace("get", "set"), getMethod.getReturnType());
                setMethod.invoke(this, getMethod.invoke(parent, (Object[]) null));

            } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
                //not found set
            }
        }
    }
 }

重写子类中的父getter和setter如何。正如Nambari所建议的。这不会有帮助,从这个问题来看,他似乎需要从另一个Parents实例创建一个新的Child实例谢谢你的回答。。有点相互作用,它实际上是BeanUtils.copyProperties(父、子)或(源、目标)@sheetal Eh。。。不是。它是BeanUtils.copyProperties(目的地,原创)
:@Jasper我想我使用的是spring框架,对于反向转换非常有用。。。谢谢。