public class CloneDemo {
public static void main(String[] args) {
Shirt t = new Shirt();
Person p1 = new Person("vicky","fan");
Person p2 = (Person)p1.clone();
System.out.println(p1);
p1.shirt.color = 44;
System.out.println(p1);
System.out.println(p2);
}
}
class Person implements Cloneable{
String firstName;
String lastName;
Shirt shirt;
Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
this.shirt = new Shirt();
}
Person(String firstName, String lastName,Shirt shirt) {
this.firstName = firstName;
this.lastName = lastName;
this.shirt = shirt;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public String toString() {
return ("[first name: " + firstName + "," + "last name: " + lastName + " Shirt: " + shirt + "]");
}
public Object clone(){
Person o = null;
try {
o = (Person)super.clone();
if(o.shirt != null) {
o.shirt =(Shirt)shirt.clone();
}
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
}
class Shirt implements Cloneable{
int color;
public Shirt() {
color = 33;
}
public String toString() {
return String.valueOf(color);
}
public Object clone(){
Object o = null;
try {
o = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
public static void main(String[] args) {
Shirt t = new Shirt();
Person p1 = new Person("vicky","fan");
Person p2 = (Person)p1.clone();
System.out.println(p1);
p1.shirt.color = 44;
System.out.println(p1);
System.out.println(p2);
}
}
class Person implements Cloneable{
String firstName;
String lastName;
Shirt shirt;
Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
this.shirt = new Shirt();
}
Person(String firstName, String lastName,Shirt shirt) {
this.firstName = firstName;
this.lastName = lastName;
this.shirt = shirt;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public String toString() {
return ("[first name: " + firstName + "," + "last name: " + lastName + " Shirt: " + shirt + "]");
}
public Object clone(){
Person o = null;
try {
o = (Person)super.clone();
if(o.shirt != null) {
o.shirt =(Shirt)shirt.clone();
}
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
}
class Shirt implements Cloneable{
int color;
public Shirt() {
color = 33;
}
public String toString() {
return String.valueOf(color);
}
public Object clone(){
Object o = null;
try {
o = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
}
===================================================
[first name: vicky,last name: fan Shirt: 33]
[first name: vicky,last name: fan Shirt: 44]
[first name: vicky,last name: fan Shirt: 33]