例如,我有:
public abstract class SomeAbstract {
private int a;
private int b;
..
private int z;
}
public class A extends SomeAbstract {
private String aField;
}
public class B extends SomeAbstract {
private long bField;
}
(省略了默认的构造函数/ setters / getter)
我有一个A类的实例,我想创建 A(抽象字段)中B类的实例。
是的,我可以像这样使用抽象类构造函数或为类B创建构造函数:
public B(A a) {
this.a = a.getA();
this.b = a.getB();
..
this.z = a.getZ();
}
但是由于我有很多领域,所以看起来并不方便 还有另一种方法吗?
答案 0 :(得分:9)
您可以在接收另一个父类的父类中创建一个构造函数。
public abstract class SomeAbstract {
/* attributes... */
public SomeAbstract() {
}
protected SomeAbstract(SomeAbstract another) {
this.a = another.a;
/* and on... */
}
}
并在子类中重用此构造函数:
public class B extends SomeAbstract {
public B(A a) {
super(a);
this.specificAttribute = a.somethingElse;
}
}
如果您有很多字段并且不想/不需要手动创建整个代码,则可以使用一个外部库来帮助您进行类之间的映射。一些选项是:
b.setValue(a.getValue()))
。