Java中克隆的问题,关于super.clone()的使用

z1372339898 2011-03-07 11:39:58
在Object类中,有protected Object clone() throws CloneNotSupportedException方法,在调用时确实用super.clone();那么此时这个super是指这个类本身还是它的父类?
如果这个类是直接继承于Object类本身,那么super.clone()是不是调用Object类中的clone()方法?
如果这个类直接继承的不是Object类而是另外一个类,那么调用super.clone()是返回的是父类对象还是这个类本身的对象?
...全文
634 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
power_on 2011-03-08
  • 打赏
  • 举报
回复
java核心技术一书上建议在需要克隆的地方实现Cloneable接口并将其改为public
magi803 2011-03-08
  • 打赏
  • 举报
回复
应该养成试一试的习惯。

调用clone();是克隆本生。但是是浅克隆。浅克隆就是只克隆基本类型和引用。引用只如果成员是对象,并不克隆这个成员对象,而只克隆这个对象的引用。

重载clone就是让你自定义克隆,有时候你希望克隆成员对象而不是成员对象的引用。有时候你也许不想克隆一些东西。

super.clone()只是说在克隆的时候,会先调用父的克隆函数而已。因为有些父中的域没有继承下来,比如私有域
z1372339898 2011-03-07
  • 打赏
  • 举报
回复
class Programmer implements Cloneable{
private String name; //员工姓名
private int age; //员工年龄
private double salary; //员工工资

/*构造方法*/
Programmer(String name,int age,double salary) {
this.name=name;
this.age=age;
this.salary=salary;
}

public Object clone() throws CloneNotSupportedException{ //定义克隆方法
Programmer p=(Programmer)super.clone(); //确定要复制的对象
return p;
}

public static void main(String[] args) {
try {
Programmer p1=new Programmer("Kevin ",25,2000);
Programmer p2=(Programmer)p1.clone();
p2 .name=" Andy "; //修改p2的员工姓名
p2.age=28; //修改p2的员工年龄
p2.salary=3000; //修改p2的员工工资
System.out.println("name="+p1.name+",age="+p1.age+",salary="+p1.salary);
System.out.println("name="+p2.name+",age="+p2.age+",salary="+p2.salary);
} catch(CloneNotSupportedException e) {
System.out.println("CloneNotSupportedException异常"+e. getMessage());
e.printStackTrace();
}
}
}
那这个程序调用的又是不是父类呢?它返回的这个类本身啊!
yaoweijq 2011-03-07
  • 打赏
  • 举报
回复
super必然父类
那要看到底另外一个类有没有重写clone方法了
z1372339898 2011-03-07
  • 打赏
  • 举报
回复
没有人能帮忙解答下吗?
z1372339898 2011-03-07
  • 打赏
  • 举报
回复
前面那段代码到底是复制的是父类还是自己?
z1372339898 2011-03-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ma309385560 的回复:]

返回的是父类对象 如果父类没重写的话
[/Quote]
那应该怎么写才能复制的是自己本身?
ma309385560 2011-03-07
  • 打赏
  • 举报
回复
返回的是父类对象 如果父类没重写的话
z1372339898 2011-03-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 binggan90du 的回复:]

如果这个类是直接继承于Object类本身,那么super.clone()是不是调用Object类中的clone()方法?

如果这个类直接继承的不是Object类而是另外一个类,那么调用super.clone()是返回的是父类对象还是这个类本身的对象?
返回父类
[/Quote]
这个程序不是要复制自己这个类吗,那返回父类的话不是就变成复制父类了啊?
binggan90du 2011-03-07
  • 打赏
  • 举报
回复
如果这个类是直接继承于Object类本身,那么super.clone()是不是调用Object类中的clone()方法?

如果这个类直接继承的不是Object类而是另外一个类,那么调用super.clone()是返回的是父类对象还是这个类本身的对象?
返回父类

62,635

社区成员

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

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