2017-05-29 116 views
1

的对象我有一个类看起来像这样:创建扩展类型

public class MyClass1 extends MyClass2 { 
    ... 
} 

现在我有MyClass2的对象,想创建类型MyClass1的对象。如何才能做到这一点?以下是不是一个很好的办法做到这一点:

MyClass2 origin = new MyClass2(); 
MyClass1 goal = new MyClass1(); 
goal.var1 = origin.var1; 
goal.var2 = origin.var2; 
goal.var3 = origin.var3; 

而且这种方式没有作用,但感觉是在正确的方向?

public MyClass2(MyClass2 copy){ 
    this = copy; 
} 

public MyClass1(MyClass2 copy){ 
    super(copy); 
} 
+0

你知道MyClass1基本上是MyClass2,但在大多数情况下还有一些字段? – XtremeBaumer

+0

你只是想找到它吗? 'MyClass1目标=原点'?还是你想做一个深层次的复制? – vikingsteve

+0

你可以创建一个实例:'MyClass1 obj1 = new MyClass1();'或'MyClass2 obj2 = new MyClass1();'如果你需要别的东西,你能提供更多的细节吗? – john

回答

4

您可以使用一个拷贝构造函数,这类似于你尝试什么:

在子类:

public MyClass1 (MyClass2 source) { 
    super (source); 
} 

在基类:

public MyClass2 (MyClass2 source) { 
    this.var1 = source.var1; 
    this.var2 = source.var2; 
    this.var3 = source.var3; 
} 
+0

不错。这里的问题是MyClass2很复杂,varX的列表很长。它觉得它应该是某种方式来做一个对象的副本,而不是? – Grains

+0

@Grains我认为唯一的另一种方法是使用反射API ......你可能只想忙于写这些单独的字段分配;-) –

+0

@KevinAnderson谢谢。但在这种情况下,更好的方法是去除“扩展”,并将“MyClass2”作为一个变量。有点难过,但至少我可以通过这种方式获得对象的副本。 – Grains