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
Object
checks the runtime type of the object being cloned, not the compile time type. So the object at runtime is of typeCloneable
which does implementsCloneable
, hence theObject
class performs the cloning accordingly: