package cloneTest;
import java.util.Date;
import java.util.GregorianCalendar;
//想要使用clone方法,必须实现Cloneable接口
public class Employee implements Cloneable{
private String name;
private double salary;
private Date hireDay;
//因为hireDay是一个日期,后面需要有专门的设置hireDay的方法,所以构造函数没有传入hireDay
public Employee(String name, double salary) {
super();
this.name = name;
this.salary = salary;
//创建对象,并获取系统当前时间,当创建类对象时,所有的字段都要初始化。
hireDay=new Date();
}
//因为object类的clone方法是protect方法,所以Employee类作为子类只能调用父类的受保护方法clone来克隆Employee对象
public Employee clone() throws CloneNotSupportedException {
//调用父类的clone方法,不可变的字段克隆时就会调用下面语句
Employee cloned=(Employee)super.clone();
//可变字段,使用深拷贝,一些可变字段类都自己有clone方法
cloned.hireDay=(Date)hireDay.clone();
return cloned;
}
//设置hireDay,传入年月日,然后从公历中获取传入的日期
public void setHireDay(int year,int month,int day) {
//构造一个给定日期的新日历对象,并调用的getTime方法获取给定日期的毫秒数
Date newHireDay=new GregorianCalendar(year,month-1,day).getTime();
//把获取给定日期的毫秒数设置为当前的hireDay,因为上面的毫秒数已经转换为Date类型,所以必须再用一次getTime方法
hireDay.setTime(newHireDay.getTime());
}
public void raiseSalary(double byPercent) {
double raise=salary*byPercent/100;
salary+=raise;
}
//重写toString()方法
public String toString() {
return "Employee[name="+name+",salary="+salary+",hireDay="+hireDay+"]";
}
}
java核心技术 卷1 解析克隆Employee对象案例
最新推荐文章于 2024-10-28 20:09:57 发布
该代码示例展示了如何在Java中实现对象的克隆。Employee类实现了Cloneable接口,覆盖了`clone()`方法进行深拷贝,特别是对`Date`对象进行了单独的克隆处理。此外,还包括设置雇佣日期(hireDay)的方法和调整薪水(raiseSalary)的功能。
摘要由CSDN通过智能技术生成