Tính đóng gói (Encapsulation) trong Java

Tính đóng gói (Encapsulation) trong Java được hiểu là ẩn giấu thuộc tính và phương thức của đối tượng, nó không cho phép truy cập trực tiếp đến dữ liệu mà phải thông qua các phương thức được đối tượng cung cấp để truy cập đến dữ liệu của chính nó.

Trong Java cung cấp thành phần được gọi là phạm vi truy cập (Access Modifier) của một lớp, một phương thức hay một thuộc tính. Access Modifier trong Java bao gồm có 4 loại là default, private, public và protected, mỗi loại được định nghĩa như sau:

– default (mặc định): Nếu như bạn không khai báo bất kì phạm vi truy cập nào (Access Modifier) thì trong Java sẽ hiểu mặc định phạm vi truy cập là default. Với default thì trong lớp (class) đó và trong gói (package) đó mới có thể nhìn thấy được.

– private (riêng tư): Nếu như bạn khai báo phạm vi truy cập là private thì chỉ duy nhất trong lớp (class) đó mới có thể nhìn thấy được.

public (công khai): Nếu như bạn khai báo phạm vi truy cập là public thì mọi thứ từ lớp (class), gói (package), lớp con (subclass) đề có thể nhìn thấy được.

protected (được bảo vệ): Nếu như bạn khai báo phạm vi truy cập là protected thì lớp (class) đó, gói (package) đó, lớp con (subclass) đó đề có thể nhìn thấy được.

Để giúp bạn hiểu rõ hơn về tính đóng gói (Encapsulation) trong Java chúng ta hãy cùng tìm hiểu qua ví dụ sau: Bạn có một đối tượng Sinh Viên (Student) gồm có các thuộc tính là mã (id), họ tên (name) và tuổi (age).

Mình sẽ tạo lớp Student.java với các khai báo như sau với mã (id) khai báo phạm vi truy cập là private, họ tên (name) khai báo phạm vi truy cập là public và tuổi (age) khai báo phạm vi truy cập là protected:

Giờ bạn tạo thêm lớp Main.java, bạn khởi tạo lớp Student và sau đó bạn thấy với 2 thuộc tính nameage mới cho phép bạn có thể truy cập và thay đổi giá trị được, còn đối với thuộc tính id bạn không thể thay đổi giá trị được nguyên nhân do nó đang được khai báo phạm vi truy cập là private.

Vậy tính đóng gói (Encapsulation) trong Java đã ẩn giấu thuộc tính và phương thức của đối tượng Student nên không cho phép truy cập trực tiếp đến dữ liệu. Nếu muốn truy cập đến dữ liệu id trong trường hợp trên thì bạn cần phải cung cấp phương thức chẳng hạn setXXX() và getXXX() để truy cập.

Bây giờ thay vì truy cập đến thuộc tính id thì bạn sẽ truy cập thông qua phương thức getId() và  setId()

Kết quả khi chạy hàm main() có thể như sau:

Lời kết: Ngoài tính đóng gói (Encapsulation) trong Java thì bạn có thể xem thêm các bài viết về tính kế thừa (Inheritance)tính đa hình (Polymorphism) và tính trừu tượng (Abstraction) trong chuyên mục Java cơ bản.

(Tác giả: Tùng Dương)

Bình luận

Loading...