Có hai loại Access Modifier trong Java, đó là: Access Modifier và Non-access Modifier.
Access Modifer trong Java xác định phạm vi có thể truy cập của biến, phương thức, constructor hoặc lớp.
Trong java, có 4 phạm vi truy cập của Access Modifier như sau:
- private
- default
- protected
- public
Ngoài ra, còn có nhiều Non-access Modifier như static, abstract, synchronized, native, volatile, transient,...
Bài này chúng ta sẽ tìm hiểu về các Access Modifier.
Nội dung chính
Tổng quan về Access Modifier trong java
Bảng dưới đây mô tả khả năng truy cập của các Access Modifier trong java:
Access Modifier | Trong lớp | Trong package | Ngoài package bởi lớp con | Ngoài package |
---|---|---|---|---|
Private | Y | N | N | N |
Default | Y | Y | N | N |
Protected | Y | Y | Y | N |
Public | Y | Y | Y | Y |
Hình ảnh minh họa:
1. Phạm vi truy cập private
Private Access Modifier chỉ được truy cập trong phạm vi lớp.
Ví dụ về private access modifier trong java
Trong ví dụ, chúng ta tạo 2 lớp A và Simple. Lớp A chứa biến và phương thức được khai bao là private. Chúng ta cố gắng truy cập chúng từ bên ngoài lớp A. Điều này dẫn đến Compile time error:
class A { private int data = 40; private void msg() { System.out.println("Hello java"); } } public class Simple { public static void main(String args[]) { A obj = new A(); System.out.println(obj.data);// Compile Time Error obj.msg();// Compile Time Error } }
Vai trò của Private Constructor
Nếu bạn tạo bất kỳ constructor là private trong lớp, bạn sẽ không thể tạo instance của class bên ngoài nó. Ví dụ:
class A { private A() { }//private constructor public void msg() { System.out.println("Hello java"); } } public class Simple { public static void main(String args[]) { A obj = new A();//Compile Time Error } }
2. Phạm vi truy cập default
Nếu bạn không khai báo modifier nào, thì nó chính là trường hợp mặc định. Default Access Modifier là chỉ được phép truy cập trong cùng package.
Ví dụ về Default Access Modifier trong Java
// Lưu file với tên A.java package vn.kienthuclaptrinh.demo; class A { void msg() { System.out.println("Hello"); } }
// Lưu file với tên B.java package vn.kienthuclaptrinh.mypack; import vn.kienthuclaptrinh.demo.*; public class B { public static void main(String args[]) { A obj = new A(); // Compile Time Error obj.msg(); // Compile Time Error } }
Trong ví dụ trên, phạm vi truy cập của lớp A và phương thức của msg() của nó là mặc định nên chúng không thể được truy cập từ bên ngoài package.
3. Phạm vi truy cập protected
Protected access modifier được truy cập bên trong package và bên ngoài package nhưng phải kế thừa.
Protected access modifier có thể được áp dụng cho biến, phương thức, constructor. Nó không thể áp dụng cho lớp.
Ví dụ về protected access modifier trong Java:
// Lưu file với tên A.java package vn.kienthuclaptrinh.demo; public class A { protected void msg() { System.out.println("Hello"); } }
// Lưu file với tên B.java package vn.kienthuclaptrinh.mypack; import vn.kienthuclaptrinh.demo.*; public class B extends A { public static void main(String args[]) { B obj = new B(); obj.msg(); } }
Kết quả:
Hello
4. Phạm vi truy cập public
Public access modifier được truy cập ở mọi nơi.
Ví dụ về public access modifier trong java:
// Lưu file với tên A.java package vn.kienthuclaptrinh.demo; public class A { public void msg() { System.out.println("Hello"); } }
// Lưu file với tên B.java package vn.kienthuclaptrinh.mypack; import vn.kienthuclaptrinh.demo.*; public class B { public static void main(String args[]) { A obj = new A(); obj.msg(); } }
Kết quả:
Hello