Cloneable接口,JDK1.0版本引入 也是一个标记接口
官方文档是这么说的
一个类实现Cloneable接口,以指示Object.clone()方法,该方法对于该类的实例进行现场复制是合法的。
在不实现Cloneable接口的实例上调用对象的克隆方法导致抛出异常CloneNotSupportedException 。
在实现了Cloneable接口,并且覆盖了Object.clone()方法,才可以调用clone,否则会抛出CloneNotSupportedException;
下面来看看具体代码:
public class Car implements Cloneable {
private String name;
private String color;
public Car(String name, String color) {
this.name = name;
this.color = color;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public Object clone() throws CloneNotSupportedException {
Car car = (Car) super.clone();
car.setColor(this.color);
car.setName(this.name);
return car;
}
public Object clone1() throws CloneNotSupportedException {
return super.clone();
}
public static void main(String[] args) {
Car car = new Car("POLO","黑色");
Car car1 = null;
try {
car1 = (Car) car.clone1();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
car.setName("1111");
System.out.println(car1);
}
为了检查下,clone后的对象是否是一个实例,后续改变了car的值。car1并没有改变。
网友评论