Ở đây ta sắp xếp các lớp NhanVienBC và NhanVienHD theo tinhPhuCap( ) từ nhỏ đến lớn
Phương thức tinhPhuCap này chỉ có ở 2 lớp con nên phải ép kiểu Dowcasting. Code bên dưới là hơi dài, nhưng để dễ hiểu cách vận hành, sau khi hiểu thì có thể làm lại gọn hơn rất nhiều (ở link tiếp theo của tháng sau)
public ArrayList sapXepNV_PhuCap() {
// sắp xếp danh sách các NV theo Phụ cấp từ nhỏ -> lớn
for (int i = 0; i < dS.size() - 1; i++) {
for (int h = i + 1; h < dS.size(); h++) {
if (dS.get(i) instanceof NhanVienBC) {
if (dS.get(h) instanceof NhanVienBC) {
if (((NhanVienBC) dS.get(i)).tinhPhuCap() > ((NhanVienBC) dS.get(h)).tinhPhuCap()) {
NhanVien tam = dS.get(i);
dS.set(i, dS.get(h));
dS.set(h, tam);
}
} else if (dS.get(h) instanceof NhanVienHD) {
if (((NhanVienBC) dS.get(i)).tinhPhuCap() > ((NhanVienHD) dS.get(h)).tinhPhuCap()) {
NhanVien tam = dS.get(i);
dS.set(i, dS.get(h));
dS.set(h, tam);
}
}
} else if (dS.get(i) instanceof NhanVienHD) {
if (dS.get(h) instanceof NhanVienBC) {
if (((NhanVienHD) dS.get(i)).tinhPhuCap() > ((NhanVienBC) dS.get(h)).tinhPhuCap()) {
NhanVien tam = dS.get(i);
dS.set(i, dS.get(h));
dS.set(h, tam);
}
} else if (dS.get(h) instanceof NhanVienHD) {
if (((NhanVienHD) dS.get(i)).tinhPhuCap() > ((NhanVienHD) dS.get(h)).tinhPhuCap()) {
NhanVien tam = dS.get(i);
dS.set(i, dS.get(h));
dS.set(h, tam);
}
}
}
}
}
return dS;
}