首页 > 编程语言 > 详细

Java对象的深克隆

时间:2017-03-18 13:47:28      阅读:304      评论:0      收藏:0      [点我收藏+]
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

Java对象的深克隆

原文:http://mazongfei.blog.51cto.com/3174958/1907846

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!