羊圈类SheepFolder里有引用类型:类Sheep,还有基本类型:name
注释代码后,是浅克隆;把注释的代码放出来,是深克隆
自行观察运行结果
class Sheep 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;
}
/* protected Object clone() throws CloneNotSupportedException{
return super.clone();
}*/
public String toString(){
StringBuilder sb = new StringBuilder();
sb.append("Sheep[name:");
sb.append(name);
sb.append(",age:");
sb.append(age);
sb.append("]");
return sb.toString();
}
}
class SheepFolder implements Cloneable{
private String name;
private Sheep sheep;
public SheepFolder(){
sheep = new Sheep();
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public Sheep getSheep(){
return sheep;
}
public void setSheep(Sheep sheep){
this.sheep = sheep;
}
protected Object clone() throws CloneNotSupportedException{
SheepFolder sf = (SheepFolder)super.clone();
sheep = (Sheep)sf.getSheep()/*.clone()*/;
return sf;
}
public String toString(){
StringBuilder sb = new StringBuilder();
sb.append("SheepFolder[name:");
sb.append(name);
sb.append(",sheep:");
sb.append(sheep);
sb.append("]");
return sb.toString();
}
}
public class SheepClone2{
public static void main(String[] args) throws Exception{
SheepFolder sf1 = new SheepFolder();
sf1.setName("小羊圈");
sf1.getSheep().setName("小羊");
sf1.getSheep().setAge(1);
SheepFolder sf2 = (SheepFolder)sf1.clone();
System.out.println(sf1);
System.out.println(sf2);
System.out.println("=================");
sf2.setName("大羊圈");
sf2.getSheep().setName("大羊");
sf2.getSheep().setAge(5);
System.out.println(sf1);
System.out.println(sf2);
}
}