Example

public OverrideClone_Exemplo() {
super();
elements = new int[ 1 ];
}

public void setElements( int value ) {
for ( int i = 0; i < elements.length; i++ ) {
elements[ i ] = value;
}
}

public void print() {
for ( int i = 0; i < elements.length; i++ ) {
System.out.println( elements[ i ] );
}
}

private int[] elements;

public static void main(String[] args){
OverrideClone_Exemplo original = new OverrideClone_Exemplo();
original.setElements( 1 );

OverrideClone_Exemplo clone = null;
try {
clone = (OverrideClone_Exemplo)original.clone();
System.out.println( "Clonar antes da modificação do original" ); //$NON-NLS-1$
clone.print();
original.setElements( 2 );
System.out.println( "Clonar após modificação do original" ); //$NON-NLS-1$
clone.print();
}catch ( CloneNotSupportedException e ) {
e.printStackTrace();
}
}

Solução
Remova a declaração implements Cloneable ou implemente clone() corretamente.

public OverrideClone_Solution() {
super();
elements = new int[ 1 ];
}

public void setElements( int value ) {
for ( int i = 0; i < elements.length; i++ ) {
elements[ i ] = value;
}
}

public void print() {
for ( int i = 0; i < elements.length; i++ ) {
System.out.println( elements[ i ] );
}
}

public Object clone() throws CloneNotSupportedException {
OverrideClone_Solution clone = (OverrideClone_Solution)super .clone();
clone.elements = new int[ elements.length ];
for ( int i = 0; i < elements.length; i++ ) {
clone.elements[ i ] = elements[ i ];
}
return clone;
}

private int[] elements;

public static void main(String[] args){
OverrideClone_Solution original = new OverrideClone_Solution();
original.setElements( 1 );

OverrideClone_Solution clone = null;
try {
clone = (OverrideClone_Solution)original.clone();
System.out.println( "Clonar antes da modificação do original" ); //$NON-NLS-1$
clone.print();
original.setElements( 2 );
System.out.println( "Clonar após modificação do original" ); //$NON-NLS-1$
clone.print();
}
catch ( CloneNotSupportedException e ) {
e.printStackTrace();
}

}