关于clone返回值的疑惑

aliscu 2014-06-10 09:41:53
请教各位大神一个问题!
在Java核心技术 一书中有这么一句话:
技师clone的默认实现(浅拷贝)能够满足要求,也应该实现Cloneable接口,将clone重定义为public,并调用super.clone()。下面是一个示例:

class Employee implements Cloneable
{
public Employee clone() throws CloneNotSupportedException
{
return (Employee) super.clone();
}
...
}

问题:我认为super.clone()返回的应该是Employee的超类类型的对象引用,这里将其强制转换成Employee不会出错吗?(即将超类强制转换成子类,我觉得这是不对的)



...全文
262 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
S117 2014-06-11
  • 打赏
  • 举报
回复
这不是java的克隆方法把!
shuxiang1990 2014-06-11
  • 打赏
  • 举报
回复
重写clone方法时需调用super.clone()来先把父类的数据进行拷贝,然后拷贝当前类的数据,在堆空间中另外开辟空间来存父类和子类的数据(只是潜拷贝,会共享引用类型数据)。因为有明显的父类和子类关系,所以父类强制转型为子类的类型应该也行。这是我的理解。
aliscu 2014-06-11
  • 打赏
  • 举报
回复
好的,我去看看,谢谢。
2.wa 2014-06-10
  • 打赏
  • 举报
回复
你看看Object的源码
protected native Object clone() throws CloneNotSupportedException;
native的,底层实现的。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧