01_克隆
01.1一个接口中,没有任何的抽象方法,这种接口我们称之为标记接口。目的就是给类打一个标记,让虚拟机支持克隆操作。
package com.west.Demo2;
//Clone克隆(深浅克隆)
public class CloneTest01 {
public static void main(String[] args) throws CloneNotSupportedException {
Dog dog = new Dog("大黄",2);
Object obj=dog.clone();
//向下转型
Dog dog1= (Dog) obj;
System.out.println(dog.age+","+dog.name);//2,大黄
System.out.println(dog1.age+","+dog1.name);//2,大黄
//赋值试验
dog1.name="小白";
dog1.age=3;
System.out.println(dog.age+","+dog.name);//2,大黄
System.out.println(dog1.age+","+dog1.name);//3,小白
//'clone()' has protected access in 'java.lang.Object'
//'clone()'对'java.lang.Object'中的访问进行了保护
}
}
class Dog implements Cloneable{
String name;
int age;
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
//重写克隆方法
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
对象浅克隆要注意的细节:
- 如果一个对象需要调用clone的方法克隆,那么该对象所属的类必须要实现Cloneable接口。
- Cloneable接口只不过是一个标识接口而已,没有任何方法。
- 对象的浅克隆就是克隆一个对象的时候,如果被克隆的对象中维护了另外一个类的对象,这时候只是克隆另外一个对象的地址,而没有把
另外一个对象也克隆一份。 - 对象的浅克隆也不会调用到构造方法的。
先记录:后期补充。