Shallow Copy Test
/* 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() { //shallow copy try { return super.clone(); } catch (CloneNotSupportedException e) { return null; } } } 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 ShallowCopyTest { 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()); } }