比较员工的年龄大小(继承、异类集合、static学习)
题目:
现在存在一个staffs[ ]异类集合,里面存放的是不同员工的资料,需要通过该异类集合来比较员工的年龄大小.集合中有
Employee类,属性有姓名、生日,行为有自身构造方法.集合中还有Manager类,它继承了Employee类,特殊属性为部门.
为了让代码难度不要过大,我们设该集合内仅有Employee和Mabager类,且数组长度为2. 现请你对这个异类集合进行赋值并比较两个员工的年龄大小,输出年龄大的员工.
下面是我代码:
以下代码都在同一个包下
date类:
package JavaSE.lu.staff;
public class date {
//首先定义一个date类型来存储员工的生日
public int day,mon,year;
//需要注意的是,变量不可以使用static类型,后面解释.
date(int i,int j,int k){
day=i;mon=j;year=k;
}
}
为什么不可以使用static变量
首先,我们先了解一下static变量的定义.
(一) static静态变量,是因为它不会随着函数的调用和退出而发生变化。即上次调用函数的时候,如果我们给静态变量赋予某个值的话,下次函数调用时,这个值保持不变.
(二) 静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在 静态存储区内分配存储单元),该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直 到整个程序运行结束.
所以,如果我们把它设置为静态变量,不同对象对该date类进行初始化赋值时,最后每个对象的date类内容都是相同的.就无法进行比较了.
Employee类:
package JavaSE.lu.staff;
public class Employee {
public String name;
public date birth;
public Employee(String a) {
name = a;
}
Employee() { //无参构造方法,子类继承该构造方法
}
}
这里需要注意的一点是需要在父类中写一个无参构造方法,这样子类manager才不会出错.因为在子类构造方法的第一行,默认使用了super() ,这样,子类才能继承父类,并使用自身的构造方法.想要更深入的了解父类与子类构造方法关系,请参考:关于Java子类继承时,为什么父类要有无参构造方法.
manager类继承Employee类:
package JavaSE.lu.staff;
public class manager extends Employee {
public manager(String a){
name=a;
}
}
主函数staffyear类:
package JavaSE.lu.staff;
public class staffyear {
public static void main(String[] args) {
Employee[] staffs = new Employee[2];
//定义了Empooyee类型的数组staffs,长度为2
staffs[0] = new Employee("lihua");
staffs[1] = new manager("wangfang");
//实例化Employee类和 manager类,并对成员变量name初始化
staffs[0].birth = new date(2, 11, 1998);
staffs[1].birth = new date(3, 11, 1999);
//实例化Date类并对成员变量birth赋值
System.out.println(staffage(staffs[0], (staffs[1])));
}
public static String staffage(Employee a, Employee b) { //staffage方法比较员工的年龄大小
if ((a.birth.year ==b.birth.year)&&(a.birth.mon==b.birth.mon)&&(a.birth.day==b.birth.day)) return "年龄相同";
if (a.birth.year < b.birth.year) return a.name;
if (a.birth.year >b.birth.year) return b.name;
if (a.birth.year == b.birth.year) {
if (a.birth.mon == b.birth.mon) {
if (a.birth.day < b.birth.day) return a.name;
else return b.name;
} else if (a.birth.mon < b.birth.mon) return a.name;
else return b.name;
}
return " ";
}
}