Cách sử dụng từ khóa abstract – final trong lập trình hướng đối tượng Java

Hướng dẫn cách sử dụng từ khóa Abstract và từ khóa Final trong Lập trình hướng đối tượng với Java. Final và abstract có ý nghĩa hoàn toàn trái ngược nhau, nên khi khai báo phải lưu ý

1) Ý nghĩa của abstract

Từ khóa abstract: Được sử dụng với ý nghĩa là trừu tượng, dở dang, chưa hoàn thành, cần phải được tiếp tục hoàn thiện bởi các lớp con.

 

Từ khóa abstract được sử dụng với các các thành phần sau:

class
method

abstract class: Là một lớp có khai báo abstract, abstract class là lớp không thể khởi tạo được đối tượng. Abstract class được sử dụng khi ta muốn cung cấp một lớp cha còn dở dang, chưa hoàn thiện, đồng thời ta muốn lớp cha này sẽ tiếp tục được hoàn thiện bởi các lớp con về sau.

abstract method: Là một phương thức không có thân (body). Đây là một method được sử dụng khi ta muốn cung cấp một hành vi chưa hoàn thiện ở lớp cha, đồng thời ta muốn các lớp con bắt buộc phải hoàn thiện hành vi này khi muốn kế thừa.

Ví dụ:

Ta định nghĩa một abstract class có tên là Animal, đồng thời trong lớp này, ta khai báo một abstract method có tên là go(). Ta có thể thấy, method go() chỉ có khai báo, không có thân.

 
cach su dung abstract final trong lap trinh huong doi tuong java 1

Sau đó, trong main() method, ta thử khởi tạo một đối tượng của abstract class Animal, ta có thể thấy trình biên dịch thông báo lỗi không khởi tạo được abstract class.

 
cach su dung abstract final trong lap trinh huong doi tuong java 2

Chú ý: Một abstract class có thể không chứa một abstract method nào, nhưng nếu một lớp mà có chứa một abstract method thì lớp đó phải khai báo là abstract.

 

Một đặc điểm rất quan trọng của abstract class/abstract method đó là:

Xem thêm: Khóa học Lập trình Web với Java trong 5 tháng

Ta sử dụng abstract class khi muốn cung cấp một lớp cha chưa hoàn thiện để cho các lớp con kế thừa, đồng thời khai báo các hành vi của lớp cha, để bắt buộc các lớp con phải định nghĩa và hoàn thiện cho các hành vi này.

Ví dụ:

Ta định nghĩa lớp Snake kết thừa lớp Animal được định nghĩa ở trên. Ta thấy trình biên dịch thông báo lỗi, vì lớp Snake chưa cài đặt các abstract method của lớp cha.

Khi một lớp con kế thừa một abstract class, thì bản thân lớp con đó phải cài đặt ( implements) tất cả các abstract method của lớp cha, hoặc bản thân lớp con đó cũng phải khai báo nó là abstract class.Xem thêm:Ta sử dụng abstract class khi muốn cung cấp một lớp cha chưa hoàn thiện để cho các lớp con kế thừa, đồng thời khai báo các hành vi của lớp cha, để bắt buộc các lớp con phải định nghĩa và hoàn thiện cho các hành vi này.Ví dụ:Ta định nghĩa lớp Snake kết thừa lớp Animal được định nghĩa ở trên. Ta thấy trình biên dịch thông báo lỗi, vì lớp Snake chưa cài đặt các abstract method của lớp cha.


 cach su dung abstract final trong lap trinh huong doi tuong java 3

Để sửa lỗi trên, ta cung cấp định nghĩa cho method go() như hình bên dưới.

 
cach su dung abstract final trong lap trinh huong doi tuong java 4

2) Ý nghĩa của final

Từ khóa final: Được sử dụng với ý nghĩa một class, hoặc một thành phần của lớp đã hoàn thiện, không cần phải chỉnh sửa hay cài đặt bổ sung thêm.

Chú ý: từ khóa final và abstract có ý nghĩa hoàn toàn trái ngược nhau, nên ta không thể vừa khai báo đồng thời một lớp, hoặc một thành phần của lớp vừa là abstract, vừa là final.
 

Từ khóa final được sử dụng với các thành phần sau:

class
method
variable

final class: Là một lớp có khai báo final. Final class được sử dụng với ý nghĩa một lớp đã hoàn thiện, và không thể kế thừa (không thể có lớp con).

Ví dụ:

Ta định nghĩa một final class có tên là Person như bên dưới.

 

cach su dung abstract final trong lap trinh huong doi tuong java 5

Sau đó, ta định nghĩa một lớp Boss là lớp con của lớp Person. Ta có thể thấy trình biên dịch hiển thị thông báo lỗi không kế thừa được lớp final như hình bên dưới.
 

cach su dung abstract final trong lap trinh huong doi tuong java 6

 

final method: Là một method có khai báo final. Final method là một method không thể ghi đè (override) bởi lớp con.

Ví dụ:

Ta khai báo method live() là final method trong lớp Animal.
 

cach su dung abstract final trong lap trinh huong doi tuong java 7

Tiếp theo, trong lớp con Snake, ta thử ghi đè method live() nói trên, ta có thể thấy trình biên dịch đã báo lỗi, vì ta không thể ghi đè final method.

 

cach su dung abstract final trong lap trinh huong doi tuong java 8

final variable: Là một biến có khai báo final. Final variable là một biến mà ta phải khởi tạo giá trị sau khi khai báo, ngoài ra giá trị của biến final không thể thay đổi. Ta thường sử dụng final khi muốn khai báo hằng số trong Java.

Ví dụ:

Ta khai báo một biến final trong lớp Person như sau.

 

cach su dung abstract final trong lap trinh huong doi tuong java 9

Sau đó ta thử thay đổi giá trị của biến final, ta thấy chương trình hiển thị thông báo lỗi như hình bên dưới, vì ta đã thay đổi giá trị của biến final.

 

 

 

Tony Hùng Cường