// 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! */
