Tại sao phải dùng @Override (ghi đè) trong phương thức của lớp Cha và lớp Con , trong khi nếu không ghi đè thì Java vẫn mặc định cho ghi đè?
Trong Java, từ khóa @Override không bắt buộc về mặt cú pháp, nhưng rất quan trọng về mặt an toàn và kiểm tra lỗi (best practice).
1/ Lớp Con (lớp dẫn xuất) Nếu KHôNG ghi @Override
public class NV1_Con extends GiamDoc_CHA {
-
Tên phương thức giống hệt (
Luong) -
Tham số giống nhau (ở đây không có tham số)
-
Kiểu trả về tương thích (ở đây là
void) -
Phạm vi truy cập không bị thu hẹp (ở đây là
public→ vẫn hợp lệ)
👉 Kết quả: chương trình vẫn chạy bình thường, phương thức Luong() trong lớp con ghi đè hoàn toàn phương thức Luong() của lớp cha.
2/ Lớp Con (lớp dẫn xuất) nếu Có ghi @Override
@Override
-
Có thực sự tồn tại phương thức
Luong()trong lớp cha không? -
Kiểu dữ liệu trả về, tên phương thức, tham số có khớp 100% với lớp cha không?
-
Nếu có sai sót, trình biên dịch sẽ báo lỗi ngay.
Nếu như trong trường hợp trên, da dùng phương thức Luon( ) như thế này mà không ghi đè @Override thì sẽ rất nguy hiểm trong các hệ thống lớn vì máy sẽ chạy sai như mình mong muốn. Trong khi mình tưởng là đã ghi đè và chạy đúng