Student.java
package cloneTest;
public class Student implements Cloneable{
private String name;
private int id;
private Score score=new Score();
public Student(String name,int id) {
this.name=name;
this.id=id;
}
@Override
public Object clone() {
Student stu = null;
try{
stu=(Student) super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return stu;
}
public Object deepClone() {
Student stu = null;
try{
stu=(Student) super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
return null;
}
stu.setScore((Score) this.score.clone());
return stu;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Score getScore() {
return score;
}
public void setScore(Score score) {
this.score = score;
}
}
Score.java
package cloneTest;
public class Score implements Cloneable{
private int total;
@Override
public Object clone(){
Score score = null;
try{
score=(Score) super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return score;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
}
Test.java
package cloneTest;
public class Test {
public static void main(String[] args) {
Student stu = new Student("zhangsan", 1111);
// Student stu2 = (Student) stu.clone();
Student stu2 = (Student) stu.deepClone();
stu.getScore().setTotal(111);
stu2.setName("lisi");
stu2.getScore().setTotal(222);
System.out.println(stu.getName());
System.out.println(stu2.getName());
System.out.println(stu.getScore().getTotal());
System.out.println(stu2.getScore().getTotal());
System.out.println(stu == stu2);
}
}
结果:
zhangsan
lisi
111
222
false