As I have learned, Object class is a top level class and it is a parent of all classes. If we do not know a type of class at compile time, we can assign it to a object of Object class.
I am trying to clone a object to object of a Object class. Also trying to get the object from HashMap which is already instantiated. I am having problem in doing this. Can you figure out it and explain the right ways of doing it? I have commented in which lines I get compile time error. My main doubts are:
- If a parent class' object can be used for cloning, then it must work with Object class too as it is top level class. 
- And how to access object from map and use it for method call and cloning. 
Code:
import java.util.HashMap;
import java.util.Map;
class Sample {
    public void call(){
}
}
class Question extends Sample implements Cloneable {
@Override
    public void call(){
    System.out.println("hello");
}
@Override
    public Object clone()throws CloneNotSupportedException{  
    return super.clone();  
    }  
public static void main(String args[]) throws CloneNotSupportedException{
    Map<Character,Object> map=new HashMap();
    Question s=new Question();
    Sample q=new Question();
    Sample cl=(Question)s.clone();
    Object ob=(Question)s.clone();//no compile time error
    map.put('o',s);
    s.call();//hello
    q.call();//hello
    cl.call();/hello
    ob.call();//Compile time error: cannot find  symbol call
    map.get('o').call();//Compile time error: cannot find  symbol call
    Object obj=(Question) (map.get('o')).clone();// Compile time error: clone has protected access in Object
}
}

sampleshould beSample