// 实现 Cloneable 接口并重写 clone 方法的示例
class Person implements Cloneable {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 重写 clone 方法
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
// Getter 和 Setter 方法
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;
}
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
public static void main(String[] args) {
try {
Person original = new Person("Alice", 30);
System.out.println("Original: " + original);
// 使用 clone 方法创建对象副本
Person cloned = (Person) original.clone();
System.out.println("Cloned: " + cloned);
// 修改原始对象的属性,验证克隆对象是否独立
original.setAge(31);
System.out.println("After modifying original object:");
System.out.println("Original: " + original);
System.out.println("Cloned: " + cloned);
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
实现 Cloneable 接口:为了使用 clone 方法,类需要实现 Cloneable 接口。这个接口本身没有定义任何方法,它只是一个标记接口,告诉 JVM 这个类支持克隆操作。
重写 clone 方法:clone 方法默认是 protected 的,所以我们需要将其重写为 public 或保持 protected,以便可以在类内部或子类中调用。
浅拷贝 vs 深拷贝:上述代码实现了浅拷贝(shallow copy),即只复制对象的基本数据类型和引用类型的引用,而不复制引用类型指向的对象。如果需要深拷贝(deep copy),则需要手动复制引用类型的对象。
CloneNotSupportedException 异常:clone 方法可能会抛出 CloneNotSupportedException,因此需要捕获该异常。
测试克隆效果:通过修改原始对象的属性,验证克隆对象是否独立于原始对象。
上一篇:java游戏编程
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站