package test.lang;
public class Sheep implements Cloneable {
<wbr> private String name;</wbr>
<wbr> public String getName() {<br><wbr><wbr><wbr> return name;<br><wbr> }</wbr></wbr></wbr></wbr></wbr>
<wbr> public void setName(String name) {<br><wbr><wbr><wbr> this.name = name;<br><wbr> }</wbr></wbr></wbr></wbr></wbr>
<wbr> @Override<br><wbr> public Sheep clone() throws CloneNotSupportedExcepti<wbr>on {<br><wbr><wbr><wbr> return (Sheep) super.clone();<br><wbr> }</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr> public static void main(String[] args) throws CloneNotSupportedExcepti<wbr>on {<br><wbr><wbr><wbr> Sheepfold sheepfold1 = new Sheepfold();<br><wbr><wbr><wbr> sheepfold1.setName("第一个羊圈");<br><wbr><wbr><wbr> Sheep sheep1 = new Sheep();<br><wbr><wbr><wbr> sheep1.setName("第一只羊");<br><wbr><wbr><wbr> sheepfold1.setSheep(sheep1);<br><wbr><wbr><wbr> Sheepfold sheepfold2 = sheepfold1.clone();<br><wbr><wbr><wbr> sheepfold2.setName("第一个羊圈的克隆");<br><wbr><wbr><wbr> System.out.println("sheepfold1.name=" + sheepfold1.getName() + ",sheep.name=" + sheepfold1.getSheep().getName());<br><wbr><wbr><wbr> System.out.println("sheepfold2.name=" + sheepfold2.getName() + ",sheep.name=" + sheepfold2.getSheep().getName());<br><wbr><wbr><wbr> System.out.println("sheepfold1.sheep==sheepfold1.sheep?" + (sheepfold1.getSheep() == sheepfold2.getSheep()));<br><wbr> }<br> }</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
class Sheepfold implements Cloneable {
<wbr> private String name;</wbr>
<wbr> private Sheep sheep;</wbr>
<wbr> @Override<br><wbr> public Sheepfold clone() throws CloneNotSupportedExcepti<wbr>on {<br><wbr><wbr><wbr> Sheepfold o = (Sheepfold) super.clone();</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr> return o;<br><wbr> }</wbr></wbr></wbr></wbr>
<wbr> public String getName() {<br><wbr><wbr><wbr> return name;<br><wbr> }</wbr></wbr></wbr></wbr></wbr>
<wbr> public void setName(String name) {<br><wbr><wbr><wbr> this.name = name;<br><wbr> }</wbr></wbr></wbr></wbr></wbr>
<wbr> public Sheep getSheep() {<br><wbr><wbr><wbr> return sheep;<br><wbr> }</wbr></wbr></wbr></wbr></wbr>
<wbr> public void setSheep(Sheep sheep) {<br><wbr><wbr><wbr> this.sheep = sheep;<br><wbr> }<br> }</wbr></wbr></wbr></wbr></wbr>
<wbr></wbr>
运行结果如下:
sheepfold1.name=第一个羊圈,sheep.name=第一只羊
sheepfold2.name=第一个羊圈的克隆,sheep.name=第一只羊
sheepfold1.sheep==sheepfold1.sheep?true
<wbr></wbr>
克隆的羊圈,里面的羊还是第一个羊圈的羊,他们完全相同.并没有被克隆过来,这就是浅层克隆,我们调整代码,实现深层克隆
<wbr> @Override<br><wbr> public Sheepfold clone() throws CloneNotSupportedExcepti<wbr>on {<br><wbr><wbr><wbr> Sheepfold o = (Sheepfold) super.clone();<br><wbr><wbr><wbr> o.sheep = this.sheep.clone();<br><wbr><wbr><wbr> return o;<br><wbr> }</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr></wbr>
运行结果
sheepfold1.name=第一个羊圈,sheep.name=第一只羊
sheepfold2.name=第一个羊圈的克隆,sheep.name=第一只羊
sheepfold1.sheep==sheepfold1.sheep?false