Bu örnekte basit bir sınıfı kopyası alınabilir (clone) haline getirip kopyasını alıyoruz.
Test sınıfını kopyası alınabilir hale getiriyoruz. Bunun için Cloneable interface'ni implement ettikten sonra clone() yöntemini override ediyoruz:
public class Test implements Cloneable {
private int no;
private String name;
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
Bu sınıfı kullanarak aşağıdaki gibi bir uygulama ile kopyasını alıyoruz ve özelliklerini değiştiriyoruz :
public class CloneTestApp {
public static void main(String[] args) {
Test t=new Test();
t.setNo(1);
t.setName("Tester");
try {
Test t2=(Test)t.clone();
t2.setNo(2);
t2.setName("Tester2");
System.out.println("Orjinal:"+t.getNo()+","+t.getName());
System.out.println("Kopya:"+t2.getNo()+","+t2.getName());
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
Uygulamayı çalıştırdığımızda aşağıdaki gibi bir çıktı vermektedir :
Orjinal:1,Tester
Kopya:2,Tester2
Görüldüğü gibi kopyası alınan nesnede değişiklik yaptığımızda asıl olan nesnede bir değişiklik olmamıştır.
Eğer Test sınıfı Cloneable interface'ni implement etmezse aşağıdaki gibi exception alınır:
java.lang.CloneNotSupportedException: com.fibiler.clone.Test
at java.lang.Object.clone(Native Method)
at com.fibiler.clone.Test.clone(Test.java:23)
at com.fibiler.clone.CloneTestApp.main(CloneTestApp.java:12)
Eğer clone() ile değilde atama yoluyla ikinci bir nesne yaratsaydık örnek aşağıdaki gibi olurdu :
public class CloneTestApp2 {
public static void main(String[] args) {
Test t=new Test();
t.setNo(1);
t.setName("Tester");
Test t2=t;
t2.setNo(2);
t2.setName("Tester2");
System.out.println("Orjinal:"+t.getNo()+","+t.getName());
System.out.println("Kopya:"+t2.getNo()+","+t2.getName());
}
}
Bu uygulamayı çalıştırdığımızda aşağıdaki gibi çıktı üretir :
Orjinal:2,Tester2
Kopya:2,Tester2
Görüldüğü gibi t2 nesnesinde yapılan değişiklikler t nesnesini de değiştirmiştir. Çünkü Test t2=t; şeklindeki atamalarda aslında iki değişken de aynı nesnesiyi göstermektedir.
Sonuç olarak kopyalamanın amacı yeni nesnede yapılan değişikliklerin asıl nesneyi değiştirmesini istememektir.