Java

Access Modifier trong Java

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 Không Không Không
default(mặc định) Không Không
protected Không
public

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.

access_modifier_0

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

access_modifier_1

Và truy cập bên trong lớp cùng package sẽ nhận thông báo lỗi.

access_modifier_2

Truy xuất ở lớp con ngoài package sẽ nhận được lỗi tương tự

access_modifier_4

Truy xuất ở lớp không phải lớp con ngoài pakage

access_modifier_5

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:

access_modifier_5

Được phép truy xuất trong bên trong lớp cùng package

access_modifier_6

Truy xuất ở lớp con ngoài package xảy ra lỗi

access_modifier_4

Truy xuất ở lớp không phải lớp con ngoài package

access_modifier_7

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

access_modifier_12

 

Truy xuất trong cùng package

access_modifier_6

Cho phép truy xuất ở lớp con ngoài package

access_modifier_8

Không cho phép truy cập các lớp không phải lớp con ngoài package

access_modifier_7

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

access_modifier_10

Truy xuất ở lớp trong cùng package

access_modifier_6

Truy xuất ở lớp con ngoài package

access_modifier_8

Truy xuất ở class không phải là lớp con ngoài package

access_modifier_11

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.

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.