1.クローンとは
clone()メソッドはObjectクラスのメソッドです。このメソッドを使用して、オブジェクトのクローンを作成します。実際のプログラミングプロセスでは、この状況に遭遇することがよくあります。オブジェクトobject1があり、ある時点でobject1にいくつかの有効な値が含まれています。このとき、object1とまったく同じ新しいオブジェクトobject2が必要になる場合があります。 object2を変更しても、object1の値には影響しません。つまり、object1とobject2は2つの独立したオブジェクトですが、object2の初期値はobject1によって決定されます。Java言語では、単純な代入ステートメントはこの要件を満たすことができません。この要求を満たす方法はたくさんありますが、clone()メソッドは最も単純で最も効率的なメソッドです。
2.クローンにはディープクローンとシャロークローンがありますが、ディープクローンとシャロークローンの違いは何ですか?
浅いクローン:基本的なデータ型の属性のみをクローンできます。
ディープクローン:基本データ型と参照データ型の属性を複製できます。
ディープクローンの実装:
①複製されたクラスと参照された属性に対応するクラスの両方がCloneableを実装してcloneメソッドをオーバーライドします。
②クローンクラスのcloneメソッドに、employee.address = address.clone();などの参照型属性割り当てコードを追加します。
public class TestClone { // 1。クローンは浅いクローンと深いクローンに分けられます //浅いクローン:基本的なデータタイプの属性のみをクローンできます //深いクローン:基本タイプと参照タイプの属性の両方をクローンできます / / 2。ディープクローンの実装方法: //①クローンクラスとアプリケーション属性に対応するクラスは、クローンメソッドを実装するためにクローン可能を実装します //②参照タイプ属性の割り当てコードをクローンクラスのクローンメソッドに追加します。employee.address = address.clone(); public static void main(String [] args){ System.out.println( "Clone before"); Address address = new Address( "China"、 "Hebei Province"、 "Cangzhou "); 従業員employee1 = new Employee("马苏 "、32、アドレス); System.out.println("従業員1情報==> "+ employee1); //クローン作成前 // Employee1情報==> Employee {name = '马Su'、年齢= 32、住所=住所{州= '中国'、州= '河北省'、city = '滄州市'}} 従業員employee2 = employee1.clone(); employee2.setAge(23); employee2。setName( "jack"); } } クラスAddressはCloneable { private Stringstate ;を実装します。 プライベートストリング州; プライベートストリングシティ; public Address(String state、String Province、String city){ this.state =状態; this.province =州; this.city = city; } public String getState(){ 状態を返す; } public void setState(String state){ this.state = state; } public String getProvince(){ 州を返す; } public void setProvince(String Province){ this.province = Province; } public String getCity(){ return city; } public void setCity(String city){ this.city = city; } @Override public String toString(){ return "Address {" + "state = '" + state +' \ '' + "、Province = '" + Province +' \ '' + "、city = '" + city +' \ '' + '}'; } @Override protected Address clone(){ アドレスアドレス= null; { address =(Address)super.clone();を試してください。 } catch(CloneNotSupportedException e){ e.printStackTrace(); private int age; プライベートアドレスアドレス; public Employee(String name、int age、Address address){ this.name = name; this.age =年齢; this.address =アドレス; } public String getName(){ 名前を返す; } public void setName(String name){ this.name = name; } public int getAge(){ 年齢を返す; } public void setAge(int age){ this.age = age; } public Address getAddress(){ 差出人住所; } public void setAddress(Address address){this.address = address; } @Override public String toString(){ return "Employee {" + "name = '" + name +' \ '' + "、age =" + age + "、address =" + address + '}'; } @Override protected Employee clone(){ 従業員employee = null; { employee =(Employee)super.clone();を試してください。 社員。 } catch(CloneNotSupportedException e){ e。 } 帰国従業員; } }