(+84) 236.3827111 ex. 402

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).

Ta có lớp Cha (lớp cơ sở)
package aaa_kethua;
public class GiamDoc_CHA {
public void Luong(){
System.out.println("Luong CB: 5000");
}
}

1/ Lớp Con (lớp dẫn xuất) Nếu KHôNG ghi @Override

public class NV1_Con extends GiamDoc_CHA {

public void Luong() {
System.out.println("7000");
}
}
+ Java vẫn ghi đè (override) hợp lệ, miễn là:
  • 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

public void Luong() {
System.out.println("7000");
}
+Lúc này, trình biên dịch Java sẽ kiểm tra rất kỹ:
  • 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