class Child implements Cloneable
{
int a;
String ss;
public Object clone()
{
Object o=null;
try
{
o=super.clone();
}
catch(CloneNotSupportedException e)
{
System.out.println(e.toString());
}
return o;
}
}1:为什么要加“implements Cloneable”这个接口呢?我觉得Child不是继承于object么,那为什么不用直接调用clone这个方法?
2:o=super.clone();为什么用super,而不是this什么的?
问题比较菜,忘各位朋友多多指教
{
int a;
String ss;
public Object clone()
{
Object o=null;
try
{
o=super.clone();
}
catch(CloneNotSupportedException e)
{
System.out.println(e.toString());
}
return o;
}
}1:为什么要加“implements Cloneable”这个接口呢?我觉得Child不是继承于object么,那为什么不用直接调用clone这个方法?
2:o=super.clone();为什么用super,而不是this什么的?
问题比较菜,忘各位朋友多多指教
解决方案 »
- 刚学hibernate,谁能大体上教教我?
- 这样的东西怎么转为ini类型
- 为什么同样的语句,java 比 c++ 快了10几倍,附有代码
- 用java组件设计一个登陆界面用户名和密码验证的程序,要求当用户名或密码为空时,弹出警告对话框;当验证通过时,弹出主界面,登录界面消失。求代码
- 谁有 良葛格Java JDK 5.0学习笔记 完整版本
- 谁有<<Java Swing,Second Edition>>的电子书? 或java.awt的电子书也可以
- rs.getString()得到的sql2000的uniqueidentifier类型跟数据库里面的不一样
- 请教!为什么在别的机上运行不能显示中文
- java+corba+applet
- 关于static关键字的一个小小疑惑,求教~~~~~~~
- 请帮我看下
- 我刚装了netBeans4.1,在java类里中文显示乱码?
child的clone方法,只是将object类的clone方法的访问权限由protected变为public
除非在必要时,你的类需要重写clone()方法,如
class A
{
...
B b=new B();//类A中有类B的引用
'''
}
public class test
{
...
A a=new A();//创建一个A的对象a
A c=(A)a.clone();//克隆a,生成了另一个对象c
...
}
其实,此时c与a并不是彻底的两个独立的对象了,其实a与c中的对象b都是指向同一块内存
故应该重写A的clone()方法,实现Cloneable接口
不对的地方请更正!
先implements Cloneable接口,调用super.clone()是用父类里实现好了的方法来结局克隆需要解决得问题;
SUN对clone的解释是:
按照惯例,此方法返回的对象应该独立于该对象(正被克隆的对象)。要获得此独立性,在 super.clone 返回对象之前,有必要对该对象的一个或多个字段进行修改。这通常意味着要复制包含正在被克隆对象的内部“深层结构”的所有可变对象,并使用对副本的引用替换对这些对象的引用。如果一个类只包含基本字段或对不变对象的引用,那么通常不需要修改 super.clone 返回的对象中的字段。
建议你了解以下"深拷贝"和"浅拷贝"的概念.
结合两位的回答我又查了下资料,基本上摸清了点头绪。
1.object的clone()是protected的,所以必须重写为public。
2.Cloneable是“标记”接口的一个范例,接口自身不指定任何东西,但是,Object.clone检查类是否实现了它,如果没有就抛出一个CloneNotSupportedException异常。
3.super问题正如gifted1982所说。我把资料归纳了一下 http://www.mycic.com.cn/bbs/viewthread.php?tid=353&fpage=1