2017-05-29 13 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 goal = origin'?または、深いコピーをしたいですか? – 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ありがとう。しかしその場合、より良いアプローチは、 "extends"を削除し、変数として "MyClass2"を持たせることです。少し悲しいですが、少なくとも私はそのようにオブジェクトのコピーを持つことができます。 – Grains