比较员工的年龄大小(继承、异类集合、static)

比较员工的年龄大小(继承、异类集合、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 " ";
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值