Access modifier trong Java

Access modifier trong Java xác định quyền truy cập trên các biến, các phương thức của class này từ các class khác trong cùng package hoặc ở hai package khác nhau.

Có bốn loại access modifier trong Java đó là: public, protected, defaultprivate. Tổng quan mỗi loại access modifier có ý nghĩa như sau:

  • public: tất cả các class khác trong hay ngoài package và nội bộ class đều có thể truy cập đến các biến, các phương thức public của class này.
  • protected: chỉ những class ở cùng package hoặc những class extends từ class này và nội bộ class mới có thể truy cập đến các biến, phương thức public của class này.
  • default: chỉ những class ở cùng package với class này và nội bộ class thì mới có thể truy cập đến các biến, các phương thức public của class này.
  • private: chỉ những class nằm bên trong class này mới có quyền truy cập đến các biến, phương thức public của class này.

Để các bạn có thể hiểu rõ hơn, chúng ta hãy đi qua từng access modifier nhé các bạn!


Public access modifier

Đây là access modifier ít giới hạn quyền truy cập nhất, các public class hoặc interface có thể được truy cập từ tất cả các package, bao gồm nội bộ class hoặc inteface cho đến các class nằm trong các package khác nhau.

Ví dụ, mình có class Student được định nghĩa là public class nằm trong package com.huongdanjava và nó có một biến public là name và một phương thức public là goToSchool() như sau:

Và mình có một class khác tên là Example nằm trong default package, class này có thể truy cập đến các biến, các phương thức của class Student như sau:

Access modifier trong Java


Protected access modifier

Các biến, các phương thức được định nghĩa với protected access modifier chỉ có truy cập từ các class nằm trong cùng package và các class con extends từ class này.

Trở lại ví dụ trong phần public access modifier, nếu bây giờ mình sửa lại access modifier của biến name và phương thức goToSchool thành protected như sau:

Thì lúc này trong class Example, lỗi compile sẽ xuất hiện:

Access modifier trong Java

Bạn chỉ có thể truy cập các biến, phương thức này trong class Example khi để nó extends từ class Student và không tạo mới đối tượng Student như sau;

Access modifier trong Java


Default access modifier

Các biến, các phương thức được định nghĩa mà không sử dụng một access modifier nào thì nó sẽ có access modifier mặc định. Những biến, phương thức này chỉ có thể truy cập từ các class nằm trong cùng package.

Tiếp theo ví dụ trên, bây giờ mình xóa các access modifier định nghĩa cho biến name và phương thức goToSchool() của class Student như sau:

Trở lại class Example, các bạn sẽ bị lỗi compile ngay:

Access modifier trong Java

Để giải quyết lỗi này, chúng ta chỉ có cách di chuyển class Example nằm cùng package với class Student như sau:

Access modifier trong Java

Lúc này, lỗi compile sẽ tự động biến mất.

Access modifier trong Java


Private access modifier

Đây là access modifer giới hạn quyền truy cập nhiều nhất, với access modifier này các biến, các phương thức của chúng ta chỉ có thể truy cập ở bên trong class.

Ví dụ, bây giờ mình sẽ thêm private vào các biến, phương thức của class Student,

ngay lúc này class Example sẽ bị lỗi compile ngay.

Access modifier trong Java

Nếu mình tạo một class khác bên trong class Student với nội dung gần giống như class Example thì sẽ không bị lỗi compile như trên

Access modifier trong Java


Access modifier với phương thức ghi đè trong class con

Nếu một class con ghi đè một phương thức của class cha, thì phương thức ghi đè này không được giảm quyền truy cập của phương thức đó, ví dụ nếu access modifier của phương thức ở class cha là default access modifier thì trong class con, chúng ta không được định nghĩa access modifier cho phương thức ghi đè này là private.

Ví dụ cụ thể hơn, mình có class Student như sau:

và class Example extends từ class Student. Giờ nếu mình muốn ghi đè phương thức goToSchool() trong class Example thì mình phải định nghĩa access modifier của phương thức ghi đè là protected hoặc public.

Access modifier trong Java

hoặc

Access modifier trong Java

Bạn không thể định nghĩa nó là private được.

Access modifier trong Java

5/5 - (1 bình chọn)

Add Comment