Access modifier trong Java
1. Modifier trong Java
Có hai loại modifier trong java: access modifiers và non-access modifiers.
Các access modifiers trong java xác định độ truy cập (Phạm vi) vào dữ liệu của của các trường, phương thức, cấu tử hoặc class.
Có 4 kiểu của java access modifiers:
- private
- (Mặc định)
- protected
- public
Và có một vài non-access modifiers chẳng hạn static, abstract, synchronized, native, volatile, transient, v.v.. Trong tài liệu này chúng ta sẽ học về access modifier.
2. Tổng quan về access modifier
Bảng minh họa dưới đây cho bạn cái nhìn tổng quan về cách sử dụng các access modifier.
Access Modifier | Truy cập bên trong class? | Truy cập bên trong package? | Truy cập bên ngoài package bởi class con? | Truy cập bên ngoài class và không thuộc class con? |
private | Y | |||
Mặc định | Y | Y | ||
protected | Y | Y | Y | |
public | Y | Y | Y | Y |
Bạn có thể hiểu chi tiết hơn theo các ví dụ dưới đây:
3. private access modifier
private access modifier chỉ cho phép truy cập trong nội bộ một class.
Bạn không thể truy cập vào trường private từ bên ngoài class định nghĩa trường private đó. Java sẽ thông báo lỗi tại thời điểm biên dịch class.
4. private constructor
Nếu bạn tạo một class, và có một cấu tử private, bạn không thể tạo một đối tượng của class này từ cấu tử private đó từ bên ngoài class này. Hãy xem ví dụ minh họa:
5. Access modifier mặc định
Trong trường hợp bạn khai báo một trường, method, hoặc cấu tử (constructor), class, .. mà không ghi rõ ràng access modifier, điều đó có nghĩa là nó là access modifier mặc định.
Phạm vi truy cập của access modifier mặc định là trong nội bộ package.
Phạm vi truy cập của access modifier mặc định là trong nội bộ package.
// Một class với access modifier mặc định.
// (Không chỉ định public).
class MyClass {
// Một trường private access modifier.
private int myField;
// Một trường access modifier mặc định.
// (Không chỉ định public, protected, private).
String myField2;
// Một method với access modifier mặc định.
// (Không chỉ định public, protected, private).
void showMe() {
}
}
Trong cùng một package bạn có thể truy cập vào các thành viên có access modifier mặc định.
Và không được phép truy cập bên ngoài package, kể cả trong class con.
Với Interface khi bạn khai báo một trường (Field) hoặc một phương thức (Method) bạn luôn phải khai báo là public hoặc để mặc định, nhưng Java luôn hiểu đó là public.
public interface MyInterface {
// Đây là một trường, bạn không thể khai báo private hoặc protected.
public static int MY_FIELD1 = 100;
// Đây là một trường, bạn để access modifier mặc định.
// Tuy nhiên Java coi đây là public.
static int MY_FIELD2 = 200;
// Đây là một method, bạn để access modifier mặc định.
// Tuy nhiên Java coi đây là public
void showInfo();
}
6. protected access modifier
protected access modifier có thể truy cập bên trong package, hoặc bên ngoài package nhưng phải thông qua tính kế thừa.
protected access modifier chỉ áp dụng cho field, method và constructor. Nó không thể áp dụng cho class (class, interface, enum, annotation).
7. public access modifier
public access modifier là mạnh mẽ nhất và có thể truy cập ở mọi nơi. Nó có phạm vi truy cập rộng nhất so với các modifier khác.
8. Ghi đè phương thức
Bạn có thể ghi đè một method của class cha với một method cùng tên cùng tham số tại class con, tuy nhiên bạn không được phép làm hạn chế phạm vi truy cập của method này.
Trên hình minh họa trên.
- Class Cat mở rộng từ class Animal và ghi đè method move(), phạm vi truy cập ghi đè từ protected thành public, điều này là hợp lệ.
- Class Mouse mở rộng từ class Animal và ghi đè method move(), phạm vi truy cập ghi đè từ protected thành mặc định, làm giảm phạm vi truy cập của method gốc, điều này không được phép.
Java cơ bản
- Tùy biến trình biên dịch java xử lý Annotation của bạn (Annotation Processing Tool)
- Lập trình Java theo nhóm sử dụng Eclipse và SVN
- Hướng dẫn và ví dụ Java WeakReference
- Hướng dẫn và ví dụ Java PhantomReference
- Hướng dẫn nén và giải nén trong Java
- Cấu hình Eclipse để sử dụng JDK thay vì JRE
- Phương thức String.format() và printf() trong Java
- Cú pháp và các tính năng mới trong Java 5
- Cú pháp và các tính năng mới trong Java 8
- Hướng dẫn sử dụng biểu thức chính quy trong Java
- Hướng dẫn lập trình đa luồng trong Java - Java Multithreading
- Thư viện điều khiển các loại cơ sở dữ liệu khác nhau trong Java
- Hướng dẫn sử dụng Java JDBC kết nối cơ sở dữ liệu
- Lấy các giá trị của các cột tự động tăng khi Insert một bản ghi sử dụng JDBC
- Hướng dẫn và ví dụ Java Stream
- Functional Interface trong Java
- Giới thiệu về Raspberry Pi
- Hướng dẫn và ví dụ Java Predicate
- Abstract class và Interface trong Java
- Access modifier trong Java
- Hướng dẫn và ví dụ Java Enum
- Hướng dẫn và ví dụ Java Annotation
- So sánh và sắp xếp trong Java
- Hướng dẫn và ví dụ Java String, StringBuffer và StringBuilder
- Hướng dẫn xử lý ngoại lệ trong Java - Java Exception Handling
- Hướng dẫn và ví dụ Java Generics
- Thao tác với tập tin và thư mục trong Java
- Hướng dẫn và ví dụ Java BiPredicate
- Hướng dẫn và ví dụ Java Consumer
- Hướng dẫn và ví dụ Java BiConsumer
- Bắt đầu với Java cần những gì?
- Lịch sử của Java và sự khác biệt giữa Oracle JDK và OpenJDK
- Cài đặt Java trên Windows
- Cài đặt Java trên Ubuntu
- Cài đặt OpenJDK trên Ubuntu
- Cài đặt Eclipse
- Cài đặt Eclipse trên Ubuntu
- Học nhanh Java cho người mới bắt đầu
- Lịch sử của bit và byte trong khoa học máy tính
- Các kiểu dữ liệu trong Java
- Các toán tử Bitwise
- Câu lệnh rẽ nhánh (if else) trong Java
- Câu lệnh rẽ nhánh switch trong Java
- Vòng lặp trong Java
- Mảng (Array) trong Java
- JDK Javadoc định dạng CHM
- Thừa kế và đa hình trong Java
- Hướng dẫn và ví dụ Java Function
- Hướng dẫn và ví dụ Java BiFunction
- Ví dụ về Java encoding và decoding sử dụng Apache Base64
- Hướng dẫn và ví dụ Java Reflection
- Hướng dẫn gọi phương thức từ xa với Java RMI
- Hướng dẫn lập trình Java Socket
- Các nền tảng nào bạn nên chọn để lập trình ứng dụng Java Desktop?
- Hướng dẫn và ví dụ Java Commons IO
- Hướng dẫn và ví dụ Java Commons Email
- Hướng dẫn và ví dụ Java Commons Logging
- Tìm hiểu về Java System.identityHashCode, Object.hashCode và Object.equals
- Hướng dẫn và ví dụ Java SoftReference
- Hướng dẫn và ví dụ Java Supplier
- Lập trình Java hướng khía cạnh với AspectJ (AOP)
Show More
- Hướng dẫn lập trình Java Servlet/JSP
- Các hướng dẫn Java Collections Framework
- Java API cho HTML & XML
- Các hướng dẫn Java IO
- Các hướng dẫn Java Date Time
- Các hướng dẫn Spring Boot
- Các hướng dẫn Maven
- Các hướng dẫn Gradle
- Các hướng dẫn Java Web Services
- Các hướng dẫn lập trình Java SWT
- Các hướng dẫn lập trình JavaFX
- Các hướng dẫn Java Oracle ADF
- Các hướng dẫn Struts2 Framework
- Các hướng dẫn Spring Cloud