NỘI DUNG BÀI VIẾT
Trong Java, ghi đè phương thức – overriding method là phương pháp “viết lại” cách thức hoạt động của 1 phương thức của lớp dẫn xuất.
Khái niệm và đặc điểm
Override là hiện tượng 1 phương thức thuộc lớp cha được định nghĩa lại ở lớp con.
- Phương thức override và được override phải có chung kiểu trả về, tên phương thức và danh sách tham số.
- Override chỉ xảy ra giữa các lớp có quan hệ kế thừa.
- 1 phương thức ở lớp cha được override ở lớp con thì phương thức override ở lớp con không được phép thu hẹp tầm vực của phương thức đó ở lớp cha.
- Phương thức ở lớp cha được override ở lớp con thì phương thức override ở lớp con không được phép phát sinh những ngoại lệ kiểm tra (checked exception) khác loại hoặc không có quan hệ kế thừa với các ngoại lệ được ném ra từ phương thức đó ở lớp cha.
- Sử dụng từ khóa super để gọi phương thức được override ở lớp cha tại phương thức override ở lớp con.
Overriding trong Java
Hãy xem ví dụ dưới đây để hiểu cách overriding trong Java
public class BaseClass {
public void doSomething(String str){
System.out.println("Base impl:"+str);
}
}
Code language: JavaScript (javascript)
Bây giờ chúng ta sẽ tạo một phương thức doSomthing BaseClass ghi đè lớp con.
public class ChildClass extends BaseClass{
public void doSomething(String str){
System.out.println("Child impl:"+str);
}
}
Code language: JavaScript (javascript)
Bây giờ chúng ta hãy tạo một lớp test để kiểm tra cách hoạt động của ghi đè trong java.
public class OverrideTest {
public static void main(String[] args) {
BaseClass bc = new ChildClass();
bc.doSomething("override");
}
}
Code language: JavaScript (javascript)
Output:
Child impl:override
Code language: CSS (css)
So sánh Overloading method và Overriding method
OVERLOADING METHOD | OVERRIDING METHOD |
---|---|
Kiểu trả về của các phương thức overload có thể giống nhau hoặc khác nhau. Số lượng tham số hoặc kiểu dữ liệu của tham số ở các hàm overload phải khác nhau. | Kiểu trả về, tên, danh sách tham số của phương thức override và phương thức được override phải giống nhau. |
Có thể mở rộng hoặc thu hẹp phạm vi của phương thức được overload. | Không thể thu hẹp phạm vi của phương thức được override. |
Cho phép tạo ra những ngoại lệ hoàn toàn mới so với những ngoại lệ từ phương thức được overload. | Không cho phép tạo ra những ngoại lệ khác loại hoặc không phải đối tượng thuộc lớp con của lớp có thể hiện là ngoại lệ từ phương thức được override. |
Phương thức overload được gọi do trình biên dịch quyết định dựa trên kiểu dữ liệu của biến tham chiếu tại quá trình biên dịch. | Phương thức override được gọi do máy ảo Java quyết định dựa trên kiểu dữ liệu của đối tượng được tham chiếu tới tại quá trình runtime. |
Kết luận
Ghi đè trong Java rất phổ biến và bạn có thể tìm thấy nhiều ví dụ trong chính JDK . Nó chủ yếu hiện diện khi chúng ta có một lớp cơ sở với việc triển khai phương thức mặc định và sau đó lớp con ghi đè nó và triển khai nó.
Happy learning!!!