学习《Java核心技术卷1:基础知识》中对象与类一章中遇到的问题

P101

4.3用户自定义类

①Employee类的代码要注意内部类问题;

②同一个包中类的重名问题,尤其是写在同一个文件中的类;

package class20110906;
import java.util.Date;
import java.util.GregorianCalendar;

//import EmployeeTest20110906.Employee;

public class EmployeeTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		// fill the staff array with three Employee objects
		Employee[] staff = new Employee[3];
		//new Employee("James Bond", 100000, 1950, 1, 1);
		
		//Eclipe提示下面三行出错了,注意Employee的内部类问题
		staff[0] = new Employee("Carl Cracker", 75000, 1987, 11, 15);
		staff[1] = new Employee("Harry Hacker", 50000, 1989, 10, 1);
		staff[2] = new Employee("Tony Tester", 40000, 1990, 3, 15);
		
		// raise everyone's salary by 5%
		for (Employee e : staff)
			e.raiseSalary(5);

		// print out information about all Employee objects
		for (Employee e : staff)
			System.out.println("name=" + e.getName() + ",salary="
					+ e.getSalary() + ",hireDay=" + e.getHireDay());

	}
}

class Employee {//该正后,Eclipse提示这个类早已被定义
		public Employee(String n, double s, int year, int month, int day) {
			this.name = n;
			this.salary = s;
			GregorianCalendar calendar = new GregorianCalendar(year, month - 1,
					day);
			// GregorianCalendar uses 0 for January
			this.hireDay = calendar.getTime();
		}

		public String getName() {
			return this.name;
		}

		public double getSalary() {
			return this.salary;
		}

		/**
		 * 不要编写返回引用可变对象的访问器方法,会产生下列问题
		 * Employee harry = ...;
		 * Date d = harry.getHireDay();
		 * double tenYearsInMilliSeconds = 10 * 365.25 * 24 * 60 * 60 * 1000;
		 * d.setTime(d.getTime() - (long) tenYearsInMilliSconds)
		 *let's give Harry ten years added seniority多增加了十年的工龄
		 * 
		 * 措施:先对其克隆再返回
		 * 
		 * @return
		 */
		/*public Date getHireDay() {
			return this.hireDay;
		}*/
		public Date getHireDay(){
			return (Date) this.hireDay.clone();
		}
		

		public void raiseSalary(double byPercent) {
			double raise = this.salary * byPercent / 100;
			this.salary += raise;
		}

		private String name;
		private double salary;
		private Date hireDay;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值