public class Address implements Cloneable{ private String state; private String province; private String city; public Address(String state, String province, String city) { this.state = state; this.province = province; this.city = city; } public String getState() { return state; } public void setState(String state) { this.state = state; } public String getProvince() { return province; } 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 + "]"; } //实现深克隆 //因为Address类的域是不可变类型String,所以可以浅克隆 @Override protected Address clone(){ Address address = null; try { address = (Address)super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return address; } }
public class Employee implements Cloneable { private String name; private int age; //新增Address对象 private Address address; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Employee(String name, int age) { this.name = name; this.age = age; } public Employee(String name, int age, Address address) { this.name = name; this.age = age; this.address = address; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public Employee() { } @Override public String toString() { return "Employee [name=" + name + ", age=" + age + ", address=" + address + "]"; } //实现浅克隆 @Override protected Employee clone() throws CloneNotSupportedException { Employee emp = null; try { emp = (Employee) super.clone(); //深克隆关键步骤 emp.address = address.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return emp; } }
测试如下:
public static void main(String[] args) throws CloneNotSupportedException { System.out.println("克隆之前:"); Address address = new Address("中国", "吉林", "长春"); Employee emp1 = new Employee("张XX",30,address); System.out.println("员工1的信息:"+emp1); System.out.println("克隆之后:"); Employee emp2 = emp1.clone(); emp2.getAddress().setState("中国"); emp2.getAddress().setProvince("四川"); emp2.getAddress().setCity("成都"); emp2.setName("李XX"); emp2.setAge(24); System.out.println("员工1的信息:"+emp1); System.out.println("员工2的信息:"+emp2); }
运行结果如下:
本文出自 “IT菜鸟” 博客,请务必保留此出处http://mazongfei.blog.51cto.com/3174958/1907846
原文:http://mazongfei.blog.51cto.com/3174958/1907846