Java access modifier được sử dụng để cung cấp kiểm soát các truy cập trong Java. Java cung cấp kiểm soát các truy cập thông qua 3 từ khoá: private, public và protected. Chúng ta thường không bị bắt buộc sử dụng những access modifier, vì vậy chúng ta có cái khác tên là default access, package-private hoặc no modifier.
Chúng ta có thể sử dụng Java access modifier với class cũng như các biến, các phương thức.
Chúng ta được cho phép chỉ sử dụng public hoặc default access trong class.
- Nếu class là public thì chúng ta có thể truy cập nó ở bất kỳ đâu, ví dụ trong bất kỳ class khác nào nằm trong bất kỳ package khác nào
- Chúng ta chỉ nên có một public class trong file source code và tên của file nên trùng với tên của class
- Nếu class là default access thì nó chỉ có thể được truy cập bởi class khác trong cùng package
Các kiểu access modifier
Default
Kiểu truy cập Default trong Java được sử dụng mặc định khi chúng ta không chỉ định kiểu access modifier cho class hoặc hàm, với modifier này chúng ta chỉ có thể truy cập trong cùng package.
// ví dụ về default access modifier package p1; //Class Example có default access modifier class Example { void display() { System.out.println("Hello World!"); } }
// sử dụng class khác truy cập vào class trên mà khác package package p2; import p1.*; // class này là default access modifier class ExampleNew { public static void main(String args[]) { //truy cập class Example từ package p1 Example obj = new Example(); obj.display(); } }
Kết quả
Compile time error
Private
Kiểu truy cập private trong Java được sử dụng để định nghĩa truy cập đến kiểu dữ liệu hoặc phương thức, nhưng nó chỉ có thể truy cập trong cùng class. Ví dụ bất kỳ class nào khác nằm trong cùng package cũng không thể truy cập đến nó. Class không thể được định nghĩa là private.
package p1; class A { private void display() { System.out.println("Hello world"); } }
package p2; import p1.*; class ExampleNew { public static void main(String args[]) { //accessing class Example from package p1 Example obj = new Example(); obj.display(); } }
Class ExampleNew thử gọi phương thức private display()
trong class A. Truy cập này là không được phép nên chúng ta sẽ nhận được thông báo lỗi
error: display() has private access in A obj.display();
Protected
Kiểu truy cập Protected được sử dụng để định nghĩa truy cập đến các kiểu dữ liệu hoặc phương thức trong cùng một package hoặc subclass không cùng package
package p1; //Class A public class A { protected void display() { System.out.println("Hello world"); } }
package p2; import p1.*; //Class B là subclass của A class B extends A { public static void main(String args[]) { B obj = new B(); obj.display(); } }
Class A và B nằm trên 2 package khác nhau nhưng class B là subclass của class A, nên nó có thể gọi hàm protected display()
của class A.
Kết quả
Hello world
Public
Kiểu truy cập public trong Java là không có giới hạn. Các kiểu dữ liệu hoặc các phương thức có thể được truy cập từ bất kỳ đâu trong chương trình. Nó có phạm vi rộng nhất trong tất cả các modifier.
package p1; public class A { public void display() { System.out.println("Hello world"); } }
package p2; import p1.*; class B { public static void main(String args[]) { A obj = new A; obj.display(); } }
Kết quả
Hello world