Mega Code Archive

 
Categories / Java / Class
 

Deep Copy Test

/* Correct Output: Original (orginal values): Person-A - Civic Clone (before change): Person-A - Civic Clone (after change): Person-B - Accord Original (after clone is modified): Person-A - Civic */ /* Software Architecture Design Patterns in Java by Partha Kuchana  Auerbach Publications */ class Person implements Cloneable {   //Lower-level object   private Car car;   private String name;   public Car getCar() {     return car;   }   public String getName() {     return name;   }   public void setName(String s) {     name = s;   }   public Person(String s, String t) {     name = s;     car = new Car(t);   }   public Object clone() {     //Deep copy     Person p = new Person(name, car.getName());     return p;   } } class Car {   private String name;   public String getName() {     return name;   }   public void setName(String s) {     name = s;   }   public Car(String s) {     name = s;   } } public class DeepCopyTest {   public static void main(String[] args) {     //Original Object     Person p = new Person("Person-A", "Civic");     System.out.println("Original (orginal values): " + p.getName() + " - "         + p.getCar().getName());     //Clone as a shallow copy     Person q = (Person) p.clone();     System.out.println("Clone (before change): " + q.getName() + " - "         + q.getCar().getName());     //change the primitive member     q.setName("Person-B");     //change the lower-level object     q.getCar().setName("Accord");     System.out.println("Clone (after change): " + q.getName() + " - "         + q.getCar().getName());     System.out.println("Original (after clone is modified): " + p.getName()         + " - " + p.getCar().getName());   } }