Java:如何在给定基实例的情况下构造派生类实例?
鉴于: 我想写:Java:如何在给定基实例的情况下构造派生类实例?,java,Java,鉴于: 我想写: @lombok.Data // generates get/set methods for all data members public class Base { private int x; private double y; private String z; ... } public class Derived extends Base { private int extra; public String addedM
@lombok.Data // generates get/set methods for all data members
public class Base {
private int x;
private double y;
private String z;
...
}
public class Derived extends Base {
private int extra;
public String addedMethod() { ... }
}
生成与“baseInstance”具有相同基本属性值的派生实例
在以下情况下,最有效的方法是什么:
Derived createDerived(Base baseInstance, int extra) { ... }
或者这个:
Derived createDerived(Base b, int extra) {
setX(b.getX());
setY(b.getY());
setZ(b.getZ());
...
this.extra = extra;
}
对Base的任何添加都会破坏派生类代码
类似这样的方式更可取,使用一个假设的复制构造函数作为基:
Derived createDerived(Base b, int extra) {
super(b.getX(), b.getY(), b.getY(), ...);
this.extra = extra;
}
生成复制构造函数的最佳方法是什么?同样,最好避免枚举Base的每个成员。如果可以修改
Base
,我会添加一个副本构造函数,并从派生的调用它:
Derived createDerived(Base b, int extra) {
super(b);
this.extra = extra;
}
如果您不能修改Base
,您仍然可以将一个实例传递给Derived
,然后通过super
分别复制每个字段:
class Base {
int field;
Base(int field) {
this.field = field;
}
Base(Base base) {
this(base.field);
}
}
class Derived extends Base {
int extra;
Derived(Base base, int extra) {
super(base);
this.extra = extra;
}
}
... 你为什么要这样做?如果操作正确,您可以访问子类中的所有父类字段。我不明白这个问题。你能扩展这个例子吗?更详细地描述场景?我甚至不知道extend
应该做什么。你能给我们看一些代码吗?您能否至少描述一下调用extends()
的结果?
Derived(Base base, int extra) {
super(base.field, extra);
}