Mục lục
Ở bài tính đóng gói mình đã có giới thiệu sơ qua từ khoá private và public trong java. Những từ khoá đó được gọi là access modifier ngoài public, private, chúng ta còn có thêm từ khoá protected. Access modifier sẽ hạn chế quyền truy cập của các biến, method, constructor của class, nếu những thành phần này không có từ khoá access modifier đi trước thì mặc định được hiểu là default.
Để hiểu được bài này, chúng ta cần có kiến thức về package trong java. Vì ở phần này mình sẽ lấy khá nhiều ví dụ sử dụng package để hiểu rõ hơn về access modifier.
Sau cùng chúng ta sẽ có 4 access modifier:
- default
- private
- protected
- public
Cú pháp sử dụng access modifier
Ví dụ 1: Access modifier độc lập
// Biến <Access modifier> <Kiểu dữ liệu> <Tên biến>; private int number; // method <Access modifier> <Kiểu trả về> <tên hàm>(param){// body}; protected void demo() {} // constructor <Access modifier> <Tên constructor>(param){// body}; public Example() {}
Ví dụ 2: Access modifier với từ khoá static
Khi đi với từ khoá static, access modifier luôn đứng trước static. Static không được phép khai báo tại constructor. Nếu một method đi với từ khoá static, nó chỉ được sử dụng các biến static của class.
// Biến <Access modifier> static <Kiểu dữ liệu> <Tên biến>; private static int number; // method <Access modifier> static <Kiểu trả về> <tên hàm>(param){// body}; protected static void demo() {}
Flow access modifier
Key |
Class |
Package |
Subclass |
World |
public |
OK |
OK |
OK |
OK |
protected |
OK |
OK |
OK |
KO |
default | OK |
OK |
KO |
KO |
private |
OK |
KO |
KO |
KO |
Bảng trên là bảng tóm tắt cho phép truy cập đối với từng keyword trong access modifier. Ví dụ đối những thành phần đi với từ khoá public thì có thể truy cập được ở trong cùng class, hoặc khác package, class con, hoặc bất cứ đâu. Private chỉ có thể truy cập được trong nội bộ class.
Default access modifier trong java
Khi chúng ta không thêm một trong 3 từ khoá private, protected, public vào trước các biến, method, constructor thì mặc định nó được hiểu là default access modifier
Ví dụ: chúng ta sẽ có 2 package abcpackage và xyzpackage
package abcpackage; // File Operator.java public class Operator { int sum(int a, int b){ return a+b; } }
package xyzpackage; // File Main.java import abcpackage.*; public class Main { public static void main(String args[]){ Addition obj = new Addition(); obj.sum(10, 21); } }
Output
Error:(9, 17) java: sum(int,int) is not public in acbpackage.Operator; cannot be accessed from outside package
Method sum() đi với default access modifier nên nó sẽ không được truy cập từ các class khác package.
Private access modifier trong java
Các thành phần dữ liệu chỉ được truy cập trong nội bộ class chứa nó.
// File Deno.java package acbpackage; public class Demo { private int number = 19; void display() { System.out.println(number); } }
// File Main.java package acbpackage; public class Main { public static void main(String[] args) { Demo demo = new Demo(); demo.display(); } }
Output: 19
Protected access modifier trong java
Trong java protected access modifier được sử dụng nhiều trong quan hệ thừa kế, các thành phần protected của class cha được chỉ định cho các class con của nó có thể sử dụng. Ngoài ra các thành phần protected cũng có thể được truy cập từ trong nội bộ class, các class cùng package.
Ví dụ
package abcpackage; // File Operator.java public class Operator { protected int sum(int a, int b){ return a+b; } }
// File SubClass.java package acbpackage; public class SubClass extends Operator { void display() { System.out.println(super.sum(12, 13)); } }
// File Main.java package acbpackage; public class Main { public static void main(String[] args) { SubClass subClass = new SubClass(); subClass.display(); } }
Output: 25
Public access modifier
Các thành phần public trong java có thể sử dụng ở bất cứ đâu trong chưong trình
package abcpackage; // File Operator.java public class Operator { public int sum(int a, int b){ return a+b; } }
// File Main.java package acbpackage; public class Main { public static void main(String[] args) { Operator obj = new Operator(); System.out.println(obj.sum(12, 13)); } }
Nguồn tham khảo
https://www.geeksforgeeks.org/access-modifiers-java/
https://www.javatpoint.com/access-modifiers