【发布时间】:2015-08-22 11:21:03
【问题描述】:
据我所知,Object class 是一个顶级类,它是所有类的父类。如果我们在编译时不知道类的类型,我们可以将其分配给 Object 类的对象。
我正在尝试将clone 对象转换为Object class 的对象。还试图从已经实例化的HashMap 获取对象。我在执行此操作时遇到问题。你能弄清楚它并解释正确的做法吗?我已经评论了在哪些行中出现编译时错误。我的主要疑问是:
如果父类的对象可以用于克隆,那么它也必须与 Object 类一起使用,因为它是顶级类。
以及如何从映射中访问对象并将其用于方法调用和克隆。
代码:
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
}
}
【问题讨论】:
-
只是一个建议。类名的第一个字符应始终为大写(约定):即
sample应为Sample -
@bvdb 谢谢。更新。 !
-
@RC。抱歉,我没有从其他线程中理解。如果你有时间,你能详细说明一下这个程序吗?
-
不要对未引用的文本使用引号格式。