1.自定义的类型如果进行克隆需实现 implements Cloneable
(1)对于数组的克隆[clone()];返回一个新数组;
(2)对自定义类型的克隆代码示例
自定义的类型如果进行克隆:
1、implements Cloneable—>他是一个空接口
问题:为什么Cloneable是一个空接口??
标记接口:作用-》标记当前类可以进行clone()
2、重写一个方法:是 Object::clone()
3、处理异常
class Money implements Cloneable {
double money = 12.5;
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
class Person implements Cloneable {
public String name;
public int age;
Money m; //使用组合
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
this.m = new Money();
}
@Override
protected Object clone() throws CloneNotSupportedException {
Person p = (Person) super.clone();
//this.m = (Money) p.m.clone();//可以
p.m = (Money) this.m.clone();//可以
return p;
//return super.clone();
}
}
public class TestDemo8 {
public static void main3(String[] args) throws CloneNotSupportedException {
Person person = new Person("caocao", 18);
Person person2 = (Person) person.clone();
System.out.println(person.m.money);
System.out.println(person2.m.money);
person2.m.money = 99.9;
System.out.println("通过person2改变money");
System.out.println(person.m.money);
System.out.println(person2.m.money);
}
public static void main2(String[] args) throws CloneNotSupportedException {
Person person = new Person();
person.name = "AAA";
Person person2 = (Person) person.clone();
person2.name = "BBB";
System.out.println(person.name);
System.out.println(person2.name);
}
}
(3)图解自定义类型克隆