オブジェクトのクローンを作成するためのclone()メソッドについて話します

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。
            }
            帰国従業員; 
         } 
    }

おすすめ

転載: blog.csdn.net/qq_37451441/article/details/109286977