clone()淺複製和深複製

public class Student {
String name;
int grade;

public Student(String name, int grade) {
        super();
        this.name = name;
        this.grade = grade;
    }
public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getGrade() {
        return grade;
    }
    public void setGrade(int grade) {
        this.grade = grade;
    }

 public  String toString() {
       return this.name+" "+this.grade;
 }

}

如果 Student s1("liutian",33);
Student s2=s1;因爲 這是引用類型,他們會指向同一塊內存。
所以我們要用克隆。也就是Student s2=(Student)s1.clone(); 因爲clone()返回的是Object類型,所以我們要強制轉換一下。

爲什麼會有深複製和淺複製呢?因爲類中如果有引用的屬性比如Professor,我們就要深複製了。
public class Student implements Cloneable{
String name;
int grade;
private Professor professor;
public Student(String name, int grade) {
super();
this.name = name;
this.grade = grade;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
//下面這個函數要會寫。
public Object clone() throws CloneNotSupportedException{
一: return super.clone();//這一個是淺複製 ,就寫這一行就可。
二: Student nt=(Student)super.clone(); //從這一行到下面纔是深複製需要做的事情。
nt.professor=(Professor)professor.clone();
return nt;
}
public String toString() {
return this.name+" "+this.grade;
}
我們最好寫上啊,直接輸出一個對象的時候會自動調用toString方法,
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章