1.Child class extends Parent class. 2.Child class implements Cloneable and overrides clone() method calls super.clone() 3.Parent class doesn't implement Cloneable interface neither it overrides clone() method.
Output: Both parent and child class state's are cloned.
Question: How Parent class state is cloned by Object class when Parent class has not implemented marker interface Cloneable?
class ParentCloneableClass{
String val;
public ParentCloneableClass(String val){
this.val = val;
}
public String getVal() {
return val;
}
}
class CloneableClass extends ParentCloneableClass implements Cloneable{
String name;
public CloneableClass(String name){
super("parentClass");
this.name = name;
}
@Override
public CloneableClass clone() throws CloneNotSupportedException {
return (CloneableClass) super.clone();
}
public String getName() {
return name;
}
}
class Demo{
public static void main(String[] args) throws CloneNotSupportedException {
CloneableClass cloneableClass = new CloneableClass("deepak");
CloneableClass cloneableClassCloned = cloneableClass.clone();
}
}
The class
Objectchecks the runtime type of the object being cloned, not the compile time type. So the object at runtime is of typeCloneablewhich does implementsCloneable, hence theObjectclass performs the cloning accordingly: