Giới thiệu
Java là một ngôn ngữ một ngôn ngữ lập trình thuần hướng đối tượng, nghĩa là bất cứ cái gì trong java cũng phải nằm trong lớp. Nó không như ngôn ngữ lai C++ là các thành phần có thể không nằm ngoài lớp ví dụ như hàm main. So với C++ thì OOP trong Java có một số điểm khác biệt. Bài viết hôm nay sẽ đề cập tới 4 phạm vi truy xuất (access modifiter) của các phương thức và thuộc tính trong lớp đó là private, default, protected, public.
Access Modifier trong Java
Access Modifier là gì
Access Modifiter là phạm vi truy xuất hay khả năng truy cập vào một thuộc tính phương thức của một class.
4 Access Modifiter trong Java
Trong Java có 4 access modifier đó là
- private
- default
- protected
- public
Các access modifiter được mô tả chi tiết ở bảng dưới đây:
Access Modifiter | Truy xuất trong lơp | Truy xuất trong package | Truy xuất ở lớp con ngoài package | Truy xuất ở lớp con ngoài package |
private | Có | Không | Không | Không |
default(mặc định) | Có | Có | Không | Không |
protected | Có | Có | Có | Không |
public | Có | Có | Có | Có |
Trên đây là bảng mô tả các phạm vi truy cập, sau đây chúng ta cùng tìm hiểu chi tiết.
Tôi tạo project có tên là AccessModifier để làm việc với 4 access modifier.
Chúng ta cùng lần lượt tìm hiểu từng access modifiter cụ thể:
Private
private: là phạm vi truy xuất thấp nhất trong các access modifiter. Các thuộc tính, phương thức đánh dấu là private chỉ có thể truy xuất trong lớp đó.
Tôi định nghĩa lớp Book với hai thuộc tính là mName và mPrice
Và truy cập bên trong lớp cùng package sẽ nhận thông báo lỗi.
Truy xuất ở lớp con ngoài package sẽ nhận được lỗi tương tự
Truy xuất ở lớp không phải lớp con ngoài pakage
default
Mặc định khi bạn khai báo mà không chỉ rõ phạm vi truy xuất thì Java hiểu đó là default (mặc định). Access Modifier này được truy cập ở trong class, ở các class cùng pakage và lớp con cùng pakage.
Tôi tiến hành sửa class Book như sau:
Được phép truy xuất trong bên trong lớp cùng package
Truy xuất ở lớp con ngoài package xảy ra lỗi
Truy xuất ở lớp không phải lớp con ngoài package
protected
protected có phạm vi truy xuất rộng hơn default là có thể truy xuất ở class con cho dùng class đó nằm ngoài hay trong package. Và không được truy xuất ở các lớp không phải là lớp con ở ngoài package.
Sửa đổi các phạm vi truy xuất của các thuộc tính trong class Book thành protected
Truy xuất trong cùng package
Cho phép truy xuất ở lớp con ngoài package
Không cho phép truy cập các lớp không phải lớp con ngoài package
public
public là phạm vi truy xuất rộng nhất. Ở bất cứ ở đầu chúng ta cũng có phép truy xuất được.
Sửa đổi các trường của class Book thành public và thử kiểm tra
Truy xuất ở lớp trong cùng package
Truy xuất ở lớp con ngoài package
Truy xuất ở class không phải là lớp con ngoài package
Kết luận
Trên đây tôi đã cùng các bạn tìm hiểu chi tiết các access modifiter hay phạm vi truy xuất trong ngôn ngữ java. Theo nguyên tắc thiết kế hướng đối tượng thì các thuộc tính của class chúng ta nên để là private và truy cập chúng thông qua các phương thức get set. Nếu chúng ta cố tình để chúng ta public thì sẽ phá vỡ nguyên tắc đóng gói của hướng đối tượng.