java–為自己的類對象添加clone(複製)能力

來源:互聯網
上載者:User

其實所有的java對象都可以具備複製能力,只是因為在基礎類Object中被設定成了一個保留方法(protected),要想真正擁有複製的能力,就需要實現Cloneable介面,重寫clone方法。通過複製方法得到的對象得到的是一個本地的副本。

程式碼範例:

class User implements Cloneable{

  int age;

  public User(int age){

    //用this關鍵字不至於類成員變數與形參混淆

    this.age=age;

  }

 

  //這裡可加@Override也可不加,加了會自動提示是否正確

  @Override

  public Object clone{

    Object o=null;

    try{

      o=super.clone();

    }catch(CloneNotSupportedException e){

      e.printStackTrace();

    }

  }

  public String toString(){

    return Integer.toString(this.age);

  }

}

 

public class Test{

  //(1)main中只能調用靜態方法(2)修改的是傳入的User對象

  static User g(User u){

    u.age++;

    return u;

  }

 

  //在本地產生了一個User對象副本

  static User f(User u){

    u=(User)u.clone();

    u.age++;

    return u;

  }

 

  public static void main(String[] args){

    User u=new User(23);

    User u2=g(u);

    if(u==u2)

      System.out.println("u==u2");

    else

      System.out.println("u!=u2");

    //下面會自動調用User對象的toString()方法

    System.out.println("u.age:"+u);

    System.out.println("u2.age:"+u2);

 

    User u3=new User(23);

    User u4=f(u3);

    if(u3==u4)

      System.out.println("u3==u4");

    else

      System.out.println("u3!=u4");

    System.out.println("u3.age:"+u3);

    System.out.println("u4.age:"+u4);

  }

}

 

//基本知識:要想讓對象具有clone方法,只要實現Cloneable介面,重寫clone方法即可,但是有兩個需要注意的點:(1)調用super.clone()方法(2)定義為public公用方法

 

/**--注意--**/

以上代碼都是在文字編輯器中寫的,可能會有些許紕漏

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.