import java.util.Arrays;
/*实现cloneable接口,此接口为标记性接口
* 实现此接口就表示当前类可以被克隆,不实现此接口就表示当前对象不可克隆
* */
class Student implements Cloneable {
private int id;//学号
private String name;//姓名
private double[] grades;//每门课程的成绩
public Student() {
}
public Student(int id, String name, double[] grades) {
this.id = id;
this.name = name;
this.grades = grades;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double[] getGrades() {
return grades;
}
public void setGrades(double[] grades) {
this.grades = grades;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", grades=" + Arrays.toString(grades) +
'}';
}
//重写此方法
@Override
protected Object clone() throws CloneNotSupportedException {
//调用父类中的clone方法,相当于让Java帮我们克隆一个对象,并把克隆之后的对象返回去
return super.clone();
//深克隆代码
}
}
public class Test {
public static void main(String args[]) {
try {
//先创建一个对象
double[] grades1 = {90, 85.5, 95};
Student stu1 = new Student(101, "张三", grades1);
//克隆对象
/*注意:不可以直接调用clone方法 */
/*Object clone = stu1.clone();此处需要强转*/
Student stu2 = (Student) stu1.clone();
System.out.println(stu1);
System.out.println(stu2);
//验证是否是同一个对象
//System.out.println(stu1 == stu2);
/*double[] grades = stu1.getGrades();
grades[0]=100;
System.out.println(stu1);
System.out.println(stu2);*/
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
/*//深克隆代码
//获取被克隆对象中数组
double[] grades = this.grades;
//创建一个新数组
double[] newgrades = new double[grades.length];
//拷贝数组内容
for (int i = 0; i < grades.length; i++) {
newgrades[i] = grades[i];
}
//调用父类的克隆方法克隆一个对象
Student student = (Student) super.clone();
//父类克隆是浅克隆,所以替换克隆对象的数组地址
student.grades = newgrades;
//返回克隆对象
return student;
*/
Java--clone()深克隆,浅克隆
最新推荐文章于 2024-07-23 21:45:09 发布