浅克隆:自定义的类型不能够克隆package com.quincy.clone;/** * 思念是种痛, * 倚楼听风雨, * 淡看江湖路, * 但见泪痕湿, * 不知心恨谁 * @author Quincy * */public class MyClone { public static void main(String[] args) { User user = new User(); user.setName("quincy"); user.setAge(25); User cloneUser= null; try { cloneUser = (User)user.clone(); System.out.println(cloneUser.getName()); System.out.println(cloneUser.getAge()); System.out.println("================"); cloneUser.setName("miao"); cloneUser.setAge(24); System.out.println(cloneUser.getName()); System.out.println(cloneUser.getAge()); System.out.println(cloneUser == user); //不相同的原因是对User类的equals方法没有重写 System.out.println(cloneUser.equals(user)); } catch (CloneNotSupportedException e) { e.printStackTrace(); } }}class User implements Cloneable{ private String name; private int age; 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; } @Override //一定要设置为public public Object clone() throws CloneNotSupportedException { //一定要调用super.clone() return super.clone(); }} 深克隆:自定义的类型也可以克隆package com.quincy.clone;/** * 深度克隆 * @author Quincy * */public class DepClone { public static void main(String[] args) { People p = new People(); p.setAge(30); p.setName("people"); User2 user2 = new User2(); user2.setAge(12); user2.setName("user2"); user2.setPeople(p); try { User2 u2 = (User2)user2.clone(); System.out.println(u2.getAge()); System.out.println(u2.getName()); p.setName("clone "); System.out.println(u2.getPeople() == p); System.out.println(u2.getPeople().getName()); System.out.println(u2.getPeople().getAge()); } catch (CloneNotSupportedException e) { e.printStackTrace(); } }}class User2 implements Cloneable{ private int age; private String name; private People people; 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; } public People getPeople() { return people; } public void setPeople(People people) { this.people = people; } //重写clone()方法 @Override public Object clone() throws CloneNotSupportedException { User2 user2 = (User2)super.clone(); user2.setPeople((People)user2.getPeople().clone()); return user2; }}class People implements Cloneable{ private int age ; private String 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; } @Override public Object clone() throws CloneNotSupportedException { // TODO Auto-generated method stub return super.clone(); } }