class CloneClass3 { String name; int val; int [] valArr; CloneClass3(String name, int val) { this.name=name; this.val=val; valArr = new int[10]; for (int i=0;i<10;i++) { valArr[i]=i; } } public String toString() { StringBuffer s = new StringBuffer(name + " val=" + val + " valArr="); for (int i=0;i<10;i++) { s.append(" " + valArr[i]); } return s.toString(); } public Object clone() { CloneClass3 cloned = new CloneClass3(name,val); for (int i=0;i<10;i++) { cloned.valArr[i] = valArr[i]; } return cloned; } public static void main(String [] args) { CloneClass3 a = new CloneClass3("instance_a", 10); a.val++; a.name=a.name + "_modified"; for (int i=0;i<10;i++) { a.valArr[i]++; } CloneClass3 b = (CloneClass3)a.clone(); System.out.println("==== CloneClass3 b = (CloneClass3)a.clone() ==="); System.out.println("a: " + a); System.out.println("b: " + b); a.val++; a.name=a.name + "_2x"; for (int i=0;i<10;i++) { a.valArr[i]++; } System.out.println("==== a est modifie, mais pas b ===="); System.out.println("a: " + a); System.out.println("b: " + b); } }