NỘI DUNG BÀI VIẾT
Java Access Modifiers sử dụng để cung cấp khả năng kiểm soát truy cập trong Java. Java cung cấp kiểm soát truy cập thông qua 3 từ khóa – private, protected và public. Chúng ta không bắt buộc phải luôn sử dụng các modifiers, vì vậy chúng ta có một công cụ khác đó là “default access“, “package-private“, hoặc “no modifers“.
Java Access Modifiers
Chúng ta có thể sử dụng access modifers với các clas cũng như tên biến và phương thức.
Chúng ta chỉ được phép sử dụng các access modifiers “public” hoặc “default” với các class Java.
- Nếu một class là “public” thì chúng ta có thể truy cập nó từ bất kỳ đâu, tức là bất kỳ class nào khác nằm trong bất kỳ package nào
- Chúng ta chỉ có thể có một class “public” trong file source và file name phải giống với tên class public.
- Nếu clas có “default access” thì nó chỉ có thể được truy cập từ các class trong cùng một package.
Java Access Modifiers cùng với Class Member
Chúng ta có thể có tất cả 4 access modifiers cho các biến và method trong class. Tuy nhiên, các access modifier member được áp dụng các quy tắc truy cập cấp độ class. Ví dụ: nếu một class đang có quyền truy cập mặc định thì nó sẽ không hiển thị trong các gói khác và do đó các method và variables của class cũng sẽ không hiển thị.
Chúng ta sẽ xem từng access modifier trong số chúng một cách riêng biệt và sau đó tôi sẽ hiển thị cách sử dụng các access modifiers java bằng một chương trình đơn giản.
Java Access Modifiers – public
Nếu class member là public thì nó có thể được truy cập từ bất cứ đâu. variable member hoặc method được truy cập global. Đây là cách đơn giản nhất để cung cấp quyền access cho các member trong class. Tuy nhiên, chúng ta nên cẩn thận khi sử dụng từ khóa này với các biến class nếu không thì bất kỳ ai cũng có thể thay đổi giá trị của biến. Thông thường, các biến lớp được giữ ở dạng private và các phương thức getter setter sẽ được cung cấp để làm việc với chúng.
Java Access Modifiers – private
Nếu một member trong lớp là “private” thì thành viên đó sẽ chỉ có thể truy cập được trong cùng một class. Đây là quyền truy cập hạn chế nhất và member trong class sẽ không hiển thị với thế giới bên ngoài. Thông thường, chúng ta giữ các biến class là private và các phương thức chỉ được sử dụng bên trong lớp là private.
Java Access Modifiers – protected
Nếu member clsas được “protected” thì nó sẽ chỉ có thể truy cập được đối với các lớp trong cùng một package và các class con. Access modifier này ít bị hạn chế hơn đối với quyền private nhưng bị hạn chế hơn đối với quyền truy cập công khai. Thông thường, chúng ta sử dụng từ khóa này để đảm bảo rằng các biến class chỉ có thể truy cập được đối với các class con.
Java Access Modifiers – default
Nếu một member trong class không có bất kỳ access modifier nào được chỉ định, thì member đó sẽ được coi là quyền truy cập default. Các quy tắc truy cập tương tự như các lớp và thành viên lớp có quyền truy cập default sẽ chỉ có thể truy cập vào các lớp trong cùng một package. Quyền truy cập này bị hạn chế hơn so với public và protected nhưng ít bị hạn chế hơn so với private.
(Ít truy cập nhất) private < default < protected < public (Có thể truy cập nhiều nhất)
Bảng dưới đây tóm tắt các access modifer ở trên liên quan đến các lớp khác nhau trong cùng một gói hoặc các gói và lớp con khác.
Hãy viết một số class đơn giản trong đó chúng ta sẽ thấy các access modifier java đang hoạt động.
class TestA {
public void methodPublic(){
methodPrivate();
}
protected void methodProtected(){
methodPrivate();
}
void methodDefault(){
methodPrivate();
}
private void methodPrivate(){}
}
Code language: JavaScript (javascript)
Lưu ý rằng class TestA có quyền truy cập default và phương thức class private có thể truy cập vào tất cả các phần khác của cùng một clsass.
public class TestB {
public static void main(String args[]) {
new TestA().methodPublic();
new TestA().methodProtected();
new TestA().methodDefault();
}
public void methodPublic() {
}
protected void methodProtected() {
}
void methodDefault() {
}
private void methodPrivate() {
}
}
Code language: JavaScript (javascript)
Lưu ý rằng class TestB nằm trong cùng một package với class TestA và do đó nó có thể truy cập các member trong class của nó. Các member private không thể truy cập được nhưng tất cả các thành viên khác đều có thể truy cập được vì cùng một package.
public class TestC {
public static void main(String[] args) {
new TestB().methodPublic();
}
}
Code language: JavaScript (javascript)
Class TestB có thể truy cập được vì nó là class public. Chỉ các member public của class TestB mới có thể truy cập được vì lớp TestC không nằm trong cùng một package cũng như class con TestB của nó.
public class TestE extends TestB {
public static void main(String[] args) {
new TestB().methodPublic();
new TestB().methodProtected(); // compile time error
// works, accessing super class protected method using subclass
new TestE().methodProtected();
}
}
Code language: JavaScript (javascript)
Vì class TestE là một class con của TestB, chúng ta có thể truy cập các member protected bởi TestB thông qua clas con TestE. Nếu chúng tai cố gắng truy cập trực tiếp vào phương thức protected của lớp cha, chúng ta sẽ gặp lỗi thời gian biên dịch.
Đó là tất cả đối với các access modifier java, nó rất đơn giản để hiểu. Đừng nhầm lẫn với access default và protected
Một cách dễ nhớ là access default bị hạn chế hơn so với protected và các member protected có thể truy cập trong các class con.
Trên đây là tất cả về Access Modifiers trong Java. Happy learning!!!
Tham khảo các bài viết khác tại https://hocjava.com/hoc-java-core/