Problemer med clone
Hej eksperterJeg forsøger at implementere clone(), men synes ikke udfaldet stemmer overens med mine forventninger.
Jeg vil mene at jeg her arbejder med en shallow clone(), hvorfor felterne i de to objekter (dvs. hhv. originalen og klonen) bør refere til de samme ikke primitive datatyper.
Hvis dette er sandt, hvorfor ændrer feltet name sig så ikke for begge objekter efter kaldet: changeName("Peter"); ?
I nogle noter jeg har fået udleveret i forbindelse med min undervisning fremgår følgende: clone.equals(original) is true
Er dette sandt? Kan ikke få det til at virke med mit eks.
Hvad gør jeg forkert?
/*
* Created on 2005-09-12
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package Testing;
/**
* @author dresN
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class TestCloning implements Cloneable{
private String name;
private int number;
public TestCloning(String name, int number) {
this.name = name;
this.number = number;
}
public void changeName(String name){
this.name = name;
}
public void changeNumber(int number){
this.number = number;
}
public String toString(){
return name + " " + number;
}
public Object cloning(){
Object o = null;
try {
o = super.clone();
} catch(CloneNotSupportedException e) {
System.err.println("MyObject can't clone");
}
return o;
}
public static void main(String[] args)throws Exception {
TestCloning t1 = new TestCloning("hans", 21);
TestCloning t2 = (TestCloning)t1.clone();
// hvorfor returnerer dette ikke true, det bør det gøre iflg. slides fra
// 2. lecture
System.out.println(t2.equals(t1));
System.out.println(t1);
System.out.println(t2);
t2.changeNumber(56);
t2.changeName("peter");
System.out.println("---------------------");
System.out.println(t1);
System.out.println(t2);
System.out.println(t1.equals(t2));
}
}
