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);
	}

运行结果如下:

wKioL1jMpH2xx6u2AACPSA-2pw0467.jpg