classAimplementsCloneable{privateint i;publicA(int ii){
i = ii;}publicvoiddoublevalue(){
i *=2;}public String toString(){return Integer.toString(i);}public Object clone(){
A o = null;try{
o =(A)super.clone();}catch(CloneNotSupportedException e){
e.printStackTrace();}return o;}}classBimplementsCloneable{publicint aInt;public A a =newA(111);public Object clone(){
B o = null;try{
o =(B)super.clone();}catch(CloneNotSupportedException e){
e.printStackTrace();}
o.a =(A) a.clone();return o;}}publicclassCloneMain{publicstaticvoidmain(String[] a){
B b1 =newB();
b1.aInt=1;
B b2 =(B) b1.clone();
b2.aInt=2;
System.out.println(b1.aInt);
A a1 =newA(111);
A a2=(A) a1.clone();
a2.doublevalue();
System.out.println(a1.toString());}}