2017-05-29 143 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