关于如何实现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(); } }
情况2:克隆对象中含有引用类型
此时需要增加步骤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; }