如何实现Cloneable接口?

Java

在Java中,如果用赋值运算符将一个对象赋值给另一个,只有这个对象的引用会被拷贝,所以改变其中一个对象会对另一个对象产生影响。
Java使用Object的clone()方法来拷贝一个对象的内容到另一个对象,当一个需要拷贝的对象包含其他对象的引用时就会出现问题。
可以实现Cloneable接口来重载Object类的clone方法。

下面这个例子就是展示如何实现cloneable接口的:

public class CloneExp implements Cloneable {

private String name;
private String address;
private int age;
private Department depart;
public CloneExp(){

}
public CloneExp(String aName, int aAge, Department aDepart) {

this.name = aName;
this.age = aAge;
this.depart = aDepart;
}

protected Object clone() throws CloneNotSupportedException {

CloneExp clone=(CloneExp)super.clone();

// 执行Department的一个浅拷贝
clone.depart=(Department)depart.clone();
return clone;

}
public static void main(String[] args) {

CloneExp ce=new CloneExp();

try {
// 执行CloneExp的深拷贝
CloneExp cloned=(CloneExp)ce.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}

}
}

同类其他面试题 点击新一篇或旧一篇可浏览全部同类面试题

新一篇:
旧一篇:

共有1条 关于 “如何实现Cloneable接口?”的评论

  • 1
    eclipse:

    Cloneable 接口和serializable 接口都在java中属于marker接口。implements 它们只是标记一下说明可以clone,serialize.而不是必须实现一些方法。
    Object clone()是基类Object提供的方法。默认的方式是浅层拷贝。浅层拷贝如果是拷贝对象的话只会拷贝address,使新的和旧的对象指向内存中的同一份,所以我们需要override这个方法,针对object进行深层拷贝

你有答案? 你对以上面试题有意见? 你想发表你的见解? 写下来吧!你的分享将会让很多人受益!

相关面试题

·什么是内部类?static nested class和inner class的不同。
·j初始值为0,j=j++;循环100遍值为多少?
·java一天中的所有微秒除以一天中所有的毫秒等于5还是?
·java陷阱之随机数问题
·java陷阱之判断奇数

版权声明:本站大部分内容为原创! 另有少部分内容整理于网络,如需转载本站内容或关切版权事宜请联系站长。未经允许,严禁复制转载本站内容,否则将追究法律责任。 本站欢迎与同类网站建立友情链接,请联系QQ:176687814