关于如何实现Object中的clone()方法 有以下2种情况。
情况1:需要克隆的对象只有基本数据类型或者String型
只需要2个步骤
克隆步骤1:实现Cloneable接口
克隆步骤2:覆盖clone方法,似情况,设置public权限。
具体代码如下:
/*
* 如果类的成员变量只是primitive(String和基本数据类型),就只需要进行浅克隆。
* 浅克隆:只需要实现步骤1,与步骤2.
*/
public class User implements Cloneable{
//实现克隆第一步:实现Cloneable接口
private int age;
private String name;
public User(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//实现克隆步骤2:覆盖clone方法,似情况,设置public权限。
@Override
public Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
return super.clone();
}
}
此时需要增加步骤3:让引用的变量指向新的克隆体
具体代码如下:
/*
* 如果类的成员变量只是primitive(String和基本数据类型),就只需要进行浅克隆。
* 浅克隆:只需要实现步骤1,与步骤2.
* 深克隆还需实现步骤3.
*/
public class Account implements Cloneable{
//实现克隆第一步:实现Cloneable接口
private int age;
private String name;
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Account(int age, String name,User user) {
this.age = age;
this.name = name;
this.user=user;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//实现克隆步骤2:覆盖clone方法,似情况,设置public权限。
@Override
public Object clone() throws CloneNotSupportedException {
//实现克隆步骤3:让引用的变量指向新的克隆体
Account a=(Account)(super.clone());
if(user!=null){
a.user=(User) user.clone();
}
return a;
}