简介
在本实验中,我们将学习如何在 Java 中创建拷贝构造函数(Copy Constructor)。拷贝构造函数用于通过现有对象的值来创建一个新对象。拷贝构造函数可用于创建浅拷贝(Shallow Clone)和深拷贝(Deep Clone)。我们将为简单类以及包含引用类型的类创建拷贝构造函数。
在本实验中,我们将学习如何在 Java 中创建拷贝构造函数(Copy Constructor)。拷贝构造函数用于通过现有对象的值来创建一个新对象。拷贝构造函数可用于创建浅拷贝(Shallow Clone)和深拷贝(Deep Clone)。我们将为简单类以及包含引用类型的类创建拷贝构造函数。
创建一个简单的 Student
类,包含 name
和 GPA
字段。我们将使用这个类来创建拷贝构造函数。
class Student {
private String name;
private double gpa;
// 带参数的构造函数
Student(String name, double gpa) {
this.name = name;
this.gpa = gpa;
}
}
为 Student
类创建一个拷贝构造函数。拷贝构造函数应接受一个该类的对象作为输入,并使用输入对象的值来初始化字段。
// 拷贝构造函数
Student(Student s) {
this.name = s.getName();
this.gpa = s.getGpa();
}
// getters
public String getName() {
return name;
}
public double getGpa() {
return gpa;
}
创建一个 Student
类的对象,然后使用拷贝构造函数创建该对象的克隆。修改原始对象的名称,并打印两个对象的名称,以查看克隆对象是否受到影响。
Student s = new Student("John", 3.5);
Student s2 = new Student(s);
s.setName("Sarah");
System.out.println("Original: " + s.getName());
System.out.println("Clone: " + s2.getName());
创建一个包含引用类型(Address
)作为字段的 Student
类。我们将使用这个类来演示浅拷贝和深拷贝的区别。
class Student {
private String name;
private double gpa;
private Address address;
// 带参数的构造函数
Student(String name, double gpa, Address address) {
this.name = name;
this.gpa = gpa;
this.address = address;
}
}
class Address {
private int postalCode;
Address(int postalCode) {
this.postalCode = postalCode;
}
}
为 Student
类创建一个浅拷贝构造函数。浅拷贝构造函数应仅为引用类型字段分配引用。
Student(Student s) {
this.name = s.getName();
this.gpa = s.getGpa();
this.address = s.getAddress();
}
创建一个 Student
对象,然后使用浅拷贝构造函数创建其克隆。修改原始对象地址的邮政编码,并打印两个对象的邮政编码,以展示克隆对象是否受到原始对象更改的影响。
Student s = new Student("John", 3.5, new Address(12345));
Student s2 = new Student(s);
s.getAddress().setPostalCode(54321);
System.out.println("Original: " + s.getAddress().getPostalCode());
System.out.println("Clone: " + s2.getAddress().getPostalCode());
为 Student
类创建一个深拷贝构造函数。深拷贝构造函数应为引用类型字段创建新的对象。
Student(Student s) {
this.name = s.getName();
this.gpa = s.getGpa();
this.address = new Address(s.getAddress().getPostalCode());
}
// getters
public Address getAddress() {
return address;
}
创建一个 Student
对象,然后使用深拷贝构造函数创建其克隆。修改原始对象地址的邮政编码,并打印两个对象的邮政编码,以展示克隆对象是否受到原始对象更改的影响。
Student s = new Student("John", 3.5, new Address(12345));
Student s2 = new Student(s);
s.getAddress().setPostalCode(54321);
System.out.println("Original: " + s.getAddress().getPostalCode());
System.out.println("Clone: " + s2.getAddress().getPostalCode());
在本实验中,我们学习了如何在 Java 中创建拷贝构造函数。拷贝构造函数可用于创建对象的深拷贝和浅拷贝。我们还比较了拷贝构造函数与 clone()
方法,并讨论了拷贝构造函数在继承中的问题。创建拷贝构造函数是一种优雅且简单的对象克隆方式。