java核心技术 卷1 解析克隆Employee对象案例

该代码示例展示了如何在Java中实现对象的克隆。Employee类实现了Cloneable接口,覆盖了`clone()`方法进行深拷贝,特别是对`Date`对象进行了单独的克隆处理。此外,还包括设置雇佣日期(hireDay)的方法和调整薪水(raiseSalary)的功能。
摘要由CSDN通过智能技术生成
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+"]";
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值