- 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);
- }
运行结果如下:
来源: http://www.bubuko.com/infodetail-1986405.html