【一道面试题】写clone()方法时,通常都有一行代码,是什么?

首先,我们来看一下clone()方法要干什么
克隆:将现有的对象复制一份,产生一份与原来对象一样的对象,但注意克隆出来的对象存的内存地址和 被克隆的对象不一样。
要想知道这道面试题答案,我们首先来看下如何使用这个clone 方法,Object对象有一个clone()方法,里面有这么一句

protected Object clone() throws CloneNotSupportedException {  
    if (!(this instanceof Cloneable)) {  
        throw new CloneNotSupportedException("Class doesn't implement Cloneable");  
    }  

    return internalClone((Cloneable) this);  
}  

会判断当前对象是否是一个Cloneable 的实现类,那么我们使用clone()方法,就得实现这个接口,
则有如下代码

public class MyClone {
    public static void main(String[] args) {
        Person p = null;
        Person p2 = null;
        try {
            p = new Person();
            p2 = (Person) p.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        System.out.println(p);
        System.out.println(p2);
    }

}
//实现Cloneable接口,重写clone()方法
class Person implements Cloneable{
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

重写clone()方法的时候 需要先克隆父类,所以 一般来说,通常都有的一行代码是
super.clone()
还有我们在使用clone的时候,会有浅克隆和深度克隆之分,一定要注意,浅克隆克隆出的对象,该对象里的引用类型的变量存储的还是原对象的值,如果有时候修改可能会修改到原对象引用的对象

猜你喜欢

转载自blog.csdn.net/u013781343/article/details/80597051