Example

public OverrideClone_Example() {
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_Example original = new OverrideClone_Example();
original.setElements( 1 );

OverrideClone_Example clone = null;
try {
clone = (OverrideClone_Example)original.clone();
System.out.println( "Clone before modification of original" ); //$NON-NLS-1$
clone.print();
original.setElements( 2 );
System.out.println( "Clone after modification of original" ); //$NON-NLS-1$
clone.print();
}catch ( CloneNotSupportedException e ) {
e.printStackTrace();
}
}

Solution
Remove the implements Cloneable declaration or implement the clone() properly.

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( "Clone before modification of original" ); //$NON-NLS-1$
clone.print();
original.setElements( 2 );
System.out.println( "Clone after modification of original" ); //$NON-NLS-1$
clone.print();
}
catch ( CloneNotSupportedException e ) {
e.printStackTrace();
}

}