创建几个比较器和继承问题

创建父类与子类,staff为父类,测试类添加职员,TEACHER,校长,保安多个实例,编写以下这几个方法private static void printName(Staff[] staffs)打印出每个人的名字private static void printSalary(Staff[] staffs)打印出Staff类或者其子类对象的薪水,支持对Staff类及其子类按照各自的薪水降序排序;private static void sortByAge(Staff[] staffs),对Staff对象按照年龄升序排序,再编写一个方法按name升序进行排序;sortByDateHired,支持对Staff类及其子类按照各自的dateHired升序排序,可以使用java.util.Date类的getTime方法。编写NameComparator,AgeComparator和ComplexComparator比较器。其中ComplexComparator为复合比较器,至少选用两个关键字来排序。

import java.util.Arrays;
import java.util.Comparator;
import java.util.Date;

class Staff {
    protected String name;
    protected int age;
    protected double salary;
    protected Date dateHired;

    public Staff(String name, int age, double salary, Date dateHired) {
        this.name = name;
        this.age = age;
        this.salary = salary;
        this.dateHired = dateHired;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public double getSalary() {
        return salary;
    }

    public Date getDateHired() {
        return dateHired;
    }
}

class Teacher extends Staff {
    public Teacher(String name, int age, double salary, Date dateHired) {
        super(name, age, salary, dateHired);
    }
}

class Principal extends Staff {
    public Principal(String name, int age, double salary, Date dateHired) {
        super(name, age, salary, dateHired);
    }
}

class Security extends Staff {
    public Security(String name, int age, double salary, Date dateHired) {
        super(name, age, salary, dateHired);
    }
}

class StaffUtils {
    public static void printName(Staff[] staffs) {
        for (Staff staff : staffs) {
            System.out.println(staff.getName());
        }
    }

    public static void printSalary(Staff[] staffs) {
        for (Staff staff : staffs) {
            System.out.println(staff.getSalary());
        }
    }

    public static void sortByAge(Staff[] staffs) {
        Arrays.sort(staffs, new AgeComparator());
    }

    public static void sortByName(Staff[] staffs) {
        Arrays.sort(staffs, new NameComparator());
    }

    public static void sortByDateHired(Staff[] staffs) {
        Arrays.sort(staffs, Comparator.comparing(Staff::getDateHired));
    }
}

class NameComparator implements Comparator<Staff> {
    @Override
    public int compare(Staff o1, Staff o2) {
        return o1.getName().compareTo(o2.getName());
    }
}

class AgeComparator implements Comparator<Staff> {
    @Override
    public int compare(Staff o1, Staff o2) {
        return Integer.compare(o1.getAge(), o2.getAge());
    }
}

class ComplexComparator implements Comparator<Staff> {
    private final Comparator<Staff> firstComparator;
    private final Comparator<Staff> secondComparator;

    public ComplexComparator(Comparator<Staff> firstComparator, Comparator<Staff> secondComparator) {
        this.firstComparator = firstComparator;
        this.secondComparator = secondComparator;
    }

    @Override
    public int compare(Staff o1, Staff o2) {
        int result = firstComparator.compare(o1, o2);
        if (result == 0) {
            result = secondComparator.compare(o1, o2);
        }
        return result;
    }
}