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

来源:互联网 发布:线切割锥度编程 编辑:程序博客网 时间:2024/05/01 06:50

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 objectsEmployee[] 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 objectsfor (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 Januarythis.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;}