如果我有:
class foo implements Cloneable
Run Code Online (Sandbox Code Playgroud)
然后做:
bar = new foo();
bar.clone();
Run Code Online (Sandbox Code Playgroud)
我得到一个浅拷贝而不需要编写任何bar.clone()代码,就像我通常在实现接口时需要做的那样.
我的理解是接口的函数必须由实现它的类填充,并且Object.clone()没有实现(根据文档,"类对象本身不实现接口Cloneable")
那么我的浅层克隆来自哪里?bar.clone()如果Object.clone()没有实现,那么实现的代码在哪里?我糊涂了.
Tom*_*Tom 29
使用克隆要非常小心.事实上,我会完全避免它.我从来没有需要它.但是......话虽如此,我所读过的关于这个主题的最佳讨论是由Joshua Bloch撰写的,在Effective Java中.阅读第11项:"明智地覆盖克隆".
请帮个忙,看看那个项目.我实际上建议阅读整章(以及本书的其余部分).你需要知道关于克隆的一切以及我为什么要提醒你这一点.
希望这可以帮助.
Object.clone()有一个实现:
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#clone()
此链接解释了Cloneable接口:http: //java.sun.com/j2se/1.5.0/docs/api/java/lang/Cloneable.html
对象必须实现Cloneable接口才能调用clone()方法,否则会抛出CloneNotSupportedException.
根据定义,Java中的所有类都扩展了基类Object,而Object类具有默认的clone()方法,即使Object本身没有实现Cloneable.如果您不自己覆盖它,将调用Object类的clone()方法.
| 归档时间: |
|
| 查看次数: |
21456 次 |
| 最近记录: |