import java.util.*;
import java.lang.*;
class Employee implements Cloneable
{
public Employee(String n ,double s)
{
name =n;
salary =s;
}
public String getName() {return name;}
public double getSalary() {return salary;} public void setHireday(int year, int month,int day)
{
hireday =new GregorianCalendar(year,month-1,day).getTime(); }
public Date getHireday(){return hireday;}
public Object clone()
{
try
{
Employee cloned =(Employee)super.clone();
return cloned;
}
catch(CloneNotSupportedException e) {return null;}
} public String toString()
{ return "name:"+name+",salary:"+salary+",hireday:"+hireday;
}
private String name;
private double salary;
private Date hireday;};class CloneTest
{
public static void main(String[] args)
{
Employee emp =new Employee("dsy",10000); emp.setHireday(2001,9,1); Employee cloned =(Employee)emp.clone(); cloned.setHireday(2002,11,24); System.out.println(emp.toString());
System.out.println(cloned.toString());
}
}
按照《core java》关于clone的内容,“若子对象可变更,那么浅拷贝将是对子对象的另一个引用”,我的理解:是如果改变emp.hireday,cloned.hireday也将随之改变。但上面程序的运行结果却并非如此,怎么回事呢?
import java.lang.*;
class Employee implements Cloneable
{
public Employee(String n ,double s)
{
name =n;
salary =s;
}
public String getName() {return name;}
public double getSalary() {return salary;} public void setHireday(int year, int month,int day)
{
hireday =new GregorianCalendar(year,month-1,day).getTime(); }
public Date getHireday(){return hireday;}
public Object clone()
{
try
{
Employee cloned =(Employee)super.clone();
return cloned;
}
catch(CloneNotSupportedException e) {return null;}
} public String toString()
{ return "name:"+name+",salary:"+salary+",hireday:"+hireday;
}
private String name;
private double salary;
private Date hireday;};class CloneTest
{
public static void main(String[] args)
{
Employee emp =new Employee("dsy",10000); emp.setHireday(2001,9,1); Employee cloned =(Employee)emp.clone(); cloned.setHireday(2002,11,24); System.out.println(emp.toString());
System.out.println(cloned.toString());
}
}
按照《core java》关于clone的内容,“若子对象可变更,那么浅拷贝将是对子对象的另一个引用”,我的理解:是如果改变emp.hireday,cloned.hireday也将随之改变。但上面程序的运行结果却并非如此,怎么回事呢?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货