(+84) 236.3827111 ex. 402

Sắp xếp các lớp tăng dần theo Phương Thức chỉ có ở lớp con theo cách thủ công


Ở đâ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;
}