public class Snake implements Cloneable { PRivate Snake next; private char c; Snake(int i, char x){ c = x; if(--i > 0){ next = new Snake(i,(char)(x+1)); } }
public void increment(){ c++; if(next!=null){ next.increment(); } }
public String toString(){ String s = ":"+c; if(next!=null){ s += next.toString(); } return s; } public Object clone(){ Object o = null; try{ o = super.clone(); }catch(CloneNotSupportedException e){} return o; } public static void main(String[] args) { Snake s = new Snake(5,´a´); System.out.println("s ="+s); Snake s2 = (Snake)s.clone(); System.out.println("s2 ="+s2); s2.increment(); System.out.println("after s2.increment, s="+s+" s2 ="+s2); } }
此时的输出结果: s =:a:b:c:d:e s2 =:a:b:c:d:e after s2.increment, s=:a:c:d:e:f s2 =:b:c:d:e:f
2、深层克隆 public class Snake implements Cloneable { private Snake next; private char c; Snake(int i, char x){ c = x; if(--i > 0){ next = new Snake(i,(char)(x+1)); } }
public void increment(){ c++; if(next!=null){ next.increment(); } }
public String toString(){ String s = ":"+c; if(next!=null){ s += next.toString(); } return s; } public Object clone(){ Snake o = null; try{ o = (Snake)super.clone(); }catch(CloneNotSupportedException e){} if(o.next !=null) o.next = (Snake)o.next.clone(); return o; } public static void main(String[] args) { Snake s = new Snake(5,´a´); System.out.println("s ="+s); Snake s2 = (Snake)s.clone(); System.out.println("s2 ="+s2); s2.increment(); System.out.println("after s2.increment, s="+s); System.out.println("s2 ="+s2); } }
此时的输出结果为: s =:a:b:c:d:e s2 =:a:b:c:d:e after s2.increment, s=:a:b:c:d:e s2 =:b:c:d:e:f