其實所有的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公共方法
/**--注意--**/
以上代碼都是在文本編輯器中寫的,可能會有些許紕漏