Java access modifiers
Chúng tôi chỉ được phép sử dụng các access modifier: “public” hoặc “default” với các lớp java.
👉1. Nếu một lớp là "public" thì chúng ta có thể truy cập nó từ bất cứ đâu, tức là từ bất kỳ lớp nào khác nằm trong bất kỳ gói nào khác, v.v.
👉2. Chúng ta chỉ có thể có một lớp “public” trong tệp nguồn và tên tệp phải giống với tên lớp public.
👉3. Nếu lớp có “default access” thì nó chỉ có thể được truy cập từ các lớp khác trong cùng một gói.
Access modifiers Java với thành viên lớp
Chúng ta có thể có tất cả bốn access modifier cho các biến và phương thức thành viên lớp. Tuy nhiên, các quy tắc sửa đổi quyền truy cập thành viên được áp dụng sau các quy tắc truy cập cấp độ lớp. Ví dụ: nếu một lớp đang có quyền truy cập default thì nó sẽ không hiển thị trong các gói khác và do đó các phương thức và biến của lớp cũng sẽ không hiển thị.Chúng tôi sẽ xem xét từng người trong số chúng một cách riêng biệt và sau đó chúng tôi sẽ hiển thị cách sử dụng các Java access modifier bằng một chương trình đơn giản.
Java Access Modifier - từ khóa public
Nếu một thành viên trong lớp là "public" thì nó có thể được truy cập từ bất cứ đâu. Biến thành viên hoặc phương thức được truy cập trên toàn cầu. Đây là cách đơn giản nhất để cung cấp quyền truy cập cho các thành viên trong lớp. 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 lớp nếu không thì bất kỳ ai cũng có thể thay đổi giá trị. Thông thường, các biến lớp được giữ ở dạng private và các phương thức getter-setter được cung cấp để làm việc với chúng.Java Access Modifier - từ khóa private
Nếu một thành viên trong lớp là "private" thì thành viên đó sẽ chỉ có thể truy cập được bên trong cùng một lớp. Đây là quyền truy cập bị hạn chế nhất và thành viên trong lớp 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 lớp là private và các phương thức chỉ được sử dụng bên trong lớp là private.Java Access Modifier - từ khóa protected
Nếu thành viên lớp được “protected” thì nó sẽ chỉ có thể truy cập được đối với các lớp trong cùng một gói và các lớp con . Công cụ sửa đổi 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 public. Thông thường, chúng tôi sử dụng từ khóa này để đảm bảo rằng các biến lớp chỉ có thể truy cập được đối với các lớp con.Java Access Modifier - quyền truy cập default
Nếu một thành viên trong lớp không có bất kỳ công cụ sửa đổi quyền truy cập nào được chỉ định, thì nó đượ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 gói. 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 access modifiers ở 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ố lớp đơn giản nơi chúng ta sẽ thấy Java access modifiers đang hoạt động.
TestA.java
package com.journaldev.access;
class TestA {
public void methodPublic(){
methodPrivate();
}
protected void methodProtected(){
methodPrivate();
}
void methodDefault(){
methodPrivate();
}
private void methodPrivate(){}
}
Lưu ý rằng lớp TestA có quyền truy cập default và phương thức private có thể truy cập vào tất cả các phần khác của cùng một lớp.
TestB.java
package com.journaldev.access;
import com.journaldev.access.TestA;
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() {
}
}
Lưu ý rằng TestB nằm trong cùng một gói với lớp TestA và do đó nó có thể truy cập các thành viên của lớp đó. các thành viên 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 gói.
TestC.java
package com.journaldev.access.child;
import com.journaldev.access.TestB;
public class TestC {
public static void main(String[] args) {
new TestB().methodPublic();
}
}
Lớp TestB có thể truy cập được vì nó là public. Chỉ các thành viên public của lớp TestB mới có thể truy cập được vì lớp TestC không nằm trong cùng một gói cũng như lớp con TestB của nó.
TestE.java
package com.journaldev.util;
import com.journaldev.access.TestB;
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();
}
}
Vì lớp TestE là một lớp con của TestB, chúng ta có thể truy cập các thành viên protected bởi TestB thông qua TestE lớp con. Nếu chúng tôi cố gắng truy cập trực tiếp vào phương thức protected của siêu lớp, chúng tôi sẽ gặp lỗi runtime.
Đó là tất cả đối với Java access modifier, thật đơn giản để hiểu. Chỉ cần không nhầm lẫn với quyền truy cập default và protected
Một cách dễ nhớ là quyền truy cập default bị hạn chế hơn so với protected và các thành viên protected có thể truy cập trong các lớp con.
Bài viết được dịch lại từ journaldev.com.
0 Nhận xét