首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

public interface Cloneable解决方案

2012-02-20 
public interface Cloneable谁用过说一说最好有例子[解决办法]class Student implements Cloneable{String

public interface Cloneable
谁用过     说一说   最好有例子

[解决办法]
class Student implements Cloneable{
String name;
Student(String name){
this.name=name;
}
public Object clone(){
Object o;
try{
o=super.clone();//调用基类Object的clone()发法,根据多态性原理,Object类可以判断出返回的是什么类型的对象;
}
catch(CloneNotSupportException e){
e.printStackTrace();
}
return o;
}
}

public CloneTest{
public static void main(String [] args){
Student s1 = new Student( "zhangshan ");
Student s2 = (Student)s1.clone();//获得s1所指向的对象的一个拷贝
s2.name= "lisi ";//修改s2.name 不会影响s1,因为在内存中s2指向的是s1的一个拷贝(与s1指向的不是同一个内存空间),对其修改不会影响s1;
System.out.println(s1.name);//输出s1.name 仍然是zhangshan
Student s3=s1;//引用s1的值赋给s3,s1和s3指向的是同一个对象(堆中的同一个地址,即对象new Student( "zhangshan ")的首地址)
s3.name= "lisi ";//修改s3.name与修改s1.name的效果是一样的
System.out.println(s1.name);//输出s1.name变为lisi;
}
}

另外注:java中参数传递,如果传递的是基本数据类型,那么是按值传递(这点比较好理解),如果传递是引用类型,实际上也可以理解为是“传值”,这里这个值,是引用的值的拷贝,即对象的首地址,这样就会导致在函数内部可以修改外部对象,有时候我们并不希望这样的结果,正如上面的例子,我们仅仅是希望获得外部对象的一个拷贝并在函数内部修改,而不希望修改影响原始的对象,这时候就需要用到对象的拷贝。要实现对象的克隆就要使对象实现Cloneable接口,该接口是一个标识性质的接口,没有定义任何方法。但我们必须显性调用基类Object的clone()方法,已返回一个拷贝对象;

热点排行