将一个对象复制一份,称为对象的克隆技术。
在Object类汇总存在一个clone()方法:
protected Onject clone() throws CloneNotSupportedException
如果某各类的对象想被克隆,则对象所在的类必须实现Cloneable接口。
此接口没有定义任何方法,是一个标记接口
接下来我们看看具体代码实现:
以下是正确的代码:
//要实现Cloneable这个接口,不用传参
public class Dog implements Cloneable{
private String name;
private int age;
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;
}
public Dog() {}
public Dog(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Dog [name=" + name + ", age=" + age + "]";
}
//把这个方法重写一下就行,什么都不写
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
主方法中实现克隆:
public class DogCloneTest {
public static void main(String[] args) throws CloneNotSupportedException {
// TODO Auto-generated method stub
Dog dog = new Dog("tom",3);
Dog dog1 = (Dog) dog.clone();
System.out.println("我是原生dog:"+dog);
System.out.println("我是克隆dog:"+dog1);
}
}
结果展示:
我是原生dog:Dog [name=tom, age=3]
我是克隆dog:Dog [name=tom, age=3]
需要注意的是:clone重写的方法的修饰词是protected,受保护的意思,此时克隆的
主方法应该和重写clone的方法在一个包中,否则会报如下错误:
The method clone() from the type Object is not visible