// INHERIT17_clone public class inherit17_clone { public static void main(String[] args) throws OutOfMemoryError { // create an identical object, not an alias A a1 = new A(1); A a2 = (A) (a1.clone()); if ( a2.equals(a1) ) System.out.println("Hooray!"); else System.out.println("Ugh!"); // works for arrays, too! char[] c = "hello".toCharArray(); char[] d = (char[]) c.clone(); } } class A { public int k; public A(int k) { this.k = k; } public boolean equals(A a) { return k == a.k; } // like $equals$, you need to provide a specific implementation public Object clone() { return new A(k); } } /* output: Hooray! */