super.clone() Queries?
<p>Kindly clarify me for the following questions.</p>

<ol>
<li>Does <code>super.clone()</code> perform Deep copying or shallow copying?</li>
<li>In the below example, why don't we need class <code>CompositeObjCloneMe</code> as cloneable? Does <code>cObj</code> won't be cloned while trying to clone <code>CloneMe</code> object?
Note: Even making <code>CompositeObjCloneMe</code> as cloneable doesn't have any impact on output.</li>
<li>Why the output is behaving like shallow copying (Not deep coppying) since program is setting primitive value(<code>setCObjValue = 100</code>) of a class? (where primitive fields are deeply copied)</li>
<li><p>Is it immutable Objects &amp;&amp; primitives are inherently deeply copied?</p>

<pre><code>class CloneMe implements Cloneable {
    private CompositeObjCloneMe cObj;

    public CloneMe() {
        cObj = new CompositeObjCloneMe();
      }

    public void setCObjValue(int myOwnDt) {
        this.cObj.setObj(myOwnDt);
    }
    public int getCObjValue() {
        return this.cObj.getObj();
    }
    //Clone
    public Object clone() throws CloneNotSupportedException {
    return super.clone();
    }
}

class CompositeObjCloneMe {//implements Cloneable{
    private int value = 20;
    public void setObj(int i){
        value = i;
    }
    public int getObj(){
        return value;
    }
//  public Object clone() throws CloneNotSupportedException{
//      return super.clone();
//  }
}


public class CloneTest {
    public static void main(String arg[]) {
        CloneMe realObj = new CloneMe();
        try {
            CloneMe cloneObj = (CloneMe) realObj.clone();
            realObj.setCObjValue(100);
            System.out.println(realObj.getCObjValue()  + "   " + cloneObj.getCObjValue());
        } catch (CloneNotSupportedException cnse) {
            System.out.println("Cloneable should be implemented. " + cnse);
        }
    }
}
</code></pre></li>
</ol>

<p>OUTPUT:   100   100</p>
