从超类实例创建实例

didi_X8 :

考虑以下情况:

class A {
  int x;
  int y;
}

class B extends A {
  int z;
}

现在,在代码中的某个地方,此类的用法如下:

A objA = getAFromSomewhere();
B objB = null;

在某种情况下,我想做类似的事情

objB = objA; // can't do this
objB.z = someZ;

当然,实际的对象要复杂一些,因此不仅仅是复制两个整数。但是它们也不是太复杂。

我知道我可以像这样为B写一个构造函数:

public B(A anA) {
  this.a = anA.a;
  this.b = anA.b;

  this.z = 0;
}

但是,如果那确实是唯一的方法,那么我更喜欢将B的其他成员合并到A中。

更新考虑答案

我的问题还不够清楚。我了解objB = objA; 不能工作(因此我要求“类似”,意思是代码复杂度可比的东西),并且我知道浅拷贝和深拷贝的问题。
我一直在寻找一种复制基类成员的可能性(例如,使用clone())。您可能会理解,手动复制每个成员是一个不好的解决方案,因为它会增加代码的复杂性和冗余性。仍然感谢您的回复!

乔恩·斯基特(Jon Skeet):

对于这一点,没有简单的解决方案,因为没有一种万能的解决方案。基本上,您不会在中包含所有信息B,因此无法保证将拥有“明智的” B对象。

可能只想创建一个构造函数,在B其中使用A并将所有A数据复制到new中B

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章