Sự khác biệt giữa public, protected, package private và private trong Java là gì?
Trong lập trình Java, việc quản lý quyền truy cập (access modifiers) cho các thành phần trong lớp là rất quan trọng. Quyền truy cập xác định cách mà các thành phần của lớp (biến, phương thức, lớp con) có thể được truy cập từ các phần khác trong mã. Bài viết này sẽ đi sâu vào bốn loại quyền truy cập chính: public, protected, package-private và private, giải thích rõ ràng ý nghĩa và ứng dụng của từng loại.
1. Khái niệm về quyền truy cập trong Java
Java cung cấp bốn loại quyền truy cập chính cho các lớp và thành phần của lớp:
public: Có thể được truy cập từ bất kỳ đâu.
protected: Có thể được truy cập từ cùng một gói và từ các lớp con ở các gói khác.
package-private (mặc định, không có từ khóa): Chỉ có thể được truy cập từ các lớp trong cùng một gói.
private: Chỉ có thể được truy cập trong chính lớp đó.
2. Chi tiết về các loại quyền truy cập
2.1. Public
Khi một thành phần (biến hoặc phương thức) được khai báo là public, nó có thể được truy cập từ bất kỳ đâu trong ứng dụng.
2.1.1. Ví dụ về public
public class PublicExample {
public String publicVariable = "I am public";
public void publicMethod() {
System.out.println("This is a public method.");
}
}
Trong ví dụ trên, biến và phương thức đều có thể được truy cập từ bất kỳ lớp nào trong dự án.
2.2. Protected
Thành phần được khai báo là protected có thể được truy cập từ:
Các lớp trong cùng một gói.
Các lớp con (subclass) ngay cả khi chúng ở gói khác.
2.2.1. Ví dụ về protected
public class Parent {
protected String protectedVariable = "I am protected";
protected void protectedMethod() {
System.out.println("This is a protected method.");
}
}
class Child extends Parent {
public void display() {
System.out.println(protectedVariable);
protectedMethod();
}
}
Trong ví dụ này, lớp Child có thể truy cập protectedVariable và protectedMethod từ lớp Parent.
2.3. Package-private (mặc định)
Nếu không có từ khóa nào được chỉ định, quyền truy cập mặc định sẽ là package-private. Thành phần này chỉ có thể được truy cập bởi các lớp trong cùng một gói.
2.3.1. Ví dụ về package-private
class DefaultExample {
String defaultVariable = "I am package-private";
void defaultMethod() {
System.out.println("This is a package-private method.");
}
}
Trong ví dụ này, defaultVariable và defaultMethod có thể được truy cập từ các lớp trong cùng một gói nhưng không thể truy cập từ lớp ở gói khác.
2.4. Private
Thành phần được khai báo là private chỉ có thể được truy cập trong chính lớp đó. Điều này bảo vệ dữ liệu và giảm khả năng lỗi trong mã.
2.4.1. Ví dụ về private
public class PrivateExample {
private String privateVariable = "I am private";
private void privateMethod() {
System.out.println("This is a private method.");
}
public void display() {
System.out.println(privateVariable);
privateMethod();
}
}
Trong ví dụ này, privateVariable và privateMethod chỉ có thể được truy cập từ phương thức display() trong lớp PrivateExample.
3. So sánh các quyền truy cập
Quyền truy cập
Mô tả
Có thể truy cập từ
public
Có thể truy cập từ bất kỳ đâu
Tất cả các lớp
protected
Có thể truy cập từ cùng một gói và lớp con
Lớp trong cùng gói và lớp con
package-private (mặc định)
Chỉ có thể truy cập trong cùng một gói
Các lớp trong cùng gói
private
Chỉ có thể truy cập trong chính lớp đó
Chính lớp đó
4. Kết luận
Việc hiểu và sử dụng đúng các quyền truy cập trong Java là rất quan trọng để đảm bảo tính bảo mật và tính nhất quán của mã. Mỗi loại quyền truy cập có những ưu và nhược điểm riêng, và lựa chọn loại phù hợp giúp quản lý mã nguồn dễ dàng hơn. Khi xây dựng các ứng dụng lớn, việc kiểm soát quyền truy cập một cách chặt chẽ sẽ giúp giảm thiểu các lỗi không đáng có và cải thiện khả năng bảo trì của mã.
This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.
Strictly Necessary Cookies
Strictly Necessary Cookie should be enabled at all times so that we can save your preferences for cookie settings.
If you disable this cookie, we will not be able to save your preferences. This means that every time you visit this website you will need to enable or disable cookies again.