Trong lập trình hướng đối tượng, việc kiểm soát quyền truy cập vào các thành phần của lớp là một phần quan trọng của việc thiết kế phần mềm. Java cung cấp bốn loại access modifiers (từ khóa phạm vi truy cập) để kiểm soát quyền truy cập này: private
, public
, protected
, và default
(không có từ khóa). Mỗi loại modifier này có phạm vi truy cập khác nhau, giúp lập trình viên kiểm soát việc truy cập vào các thành phần của lớp một cách linh hoạt và an toàn.
Private
Modifier private
là loại hạn chế nhất, chỉ cho phép truy cập từ bên trong lớp mà nó được khai báo. Điều này đảm bảo rằng dữ liệu và phương thức được bảo vệ khỏi sự truy cập không mong muốn từ bên ngoài lớp, giúp tăng cường tính đóng gói và an toàn cho dữ liệu.
Ví dụ về Private
java
class Account {
private double balance;
public Account(double initialBalance) {
if (initialBalance > 0) {
balance = initialBalance;
}
}
private void deductFees() {
balance -= 20; // Giả sử phí hàng tháng là 20
}
public void displayBalance() {
deductFees();
System.out.println("Số dư hiện tại: " + balance);
}
}
Trong ví dụ trên, phương thức deductFees()
và biến balance
được đánh dấu là private
, nghĩa là chúng chỉ có thể được truy cập và sử dụng bên trong lớp Account
.
Public
Modifier public
có phạm vi truy cập rộng nhất. Một thành phần được khai báo là public
có thể được truy cập từ bất kỳ đâu, bên trong hoặc bên ngoài lớp, từ lớp khác trong cùng một gói (package) hoặc từ một gói khác.
Ví dụ về Public
java
public class Car {
public String model;
public int year;
public Car(String model, int year) {
this.model = model;
this.year = year;
}
public void displayDetails() {
System.out.println("Model: " + model + ", Năm: " + year);
}
}
Trong ví dụ này, tất cả các thành phần của lớp Car
đều được khai báo là public
, nghĩa là chúng có thể được truy cập và sử dụng từ bất kỳ đâu.
Protected
Modifier protected
có phạm vi truy cập rộng hơn private
nhưng hẹp hơn public
. Các thành phần được khai báo là protected
có thể được truy cập từ bên trong lớp mà chúng được khai báo, từ các lớp con của lớp đó, và từ các lớp khác trong cùng một gói.
Ví dụ về Protected
java
package vehicles;
public class Vehicle {
protected String licensePlate;
protected void startEngine() {
System.out.println("Động cơ khởi động!");
}
}
class Car extends Vehicle {
public void display() {
startEngine();
System.out.println("Biển số xe: " + licensePlate);
}
}
Trong ví dụ này, licensePlate
và phương thức startEngine()
được khai báo là protected
, nghĩa là chúng có thể được truy cập từ lớp con Car
.
Default (Package-Private)
Nếu một thành phần không được khai báo với bất kỳ access modifier nào, nó sẽ mặc định có modifier là default
, còn được gọi là package-private. Điều này có nghĩa là thành phần đó chỉ có thể được truy cập từ bên trong gói mà nó được khai báo.
Ví dụ về Default
java
package library;
class Book {
String title;
void borrow() {
System.out.println("Sách đã được mượn.");
}
}
Trong ví dụ này, title
và phương thức borrow()
không có access modifier nào được khai báo, nên chúng mặc định là default
. Điều này có nghĩa là chúng chỉ có thể được truy cập từ bên trong gói library
.
Kết Luận
Việc hiểu rõ về các access modifiers trong Java là rất quan trọng để kiểm soát quyền truy cập vào các thành phần của lớp một cách chính xác và an toàn. Mỗi loại modifier có phạm vi truy cập và mục đích sử dụng riêng, giúp lập trình viên xây dựng các ứng dụng có cấu trúc tốt và dễ bảo trì.