Modifiers Trong Java
Trong lập trình Java, các visibility modifiers (hay còn gọi là access modifiers) quyết định phạm vi truy cập của các thành phần trong một class. Bài viết này sẽ đi sâu vào ba visibility modifiers chính là public
, private
, và protected
, cũng như cách mà chúng ảnh hưởng đến việc quản lý quyền truy cập trong lập trình Java.
1. Modifier Public
Khái Niệm
public
là modifier có phạm vi truy cập rộng nhất. Nếu một thành phần được đánh dấu là public
, nó có thể được truy cập từ bất kỳ đâu, kể cả các class trong các package khác.
Ví Dụ
Khi phát triển một ứng dụng quản lý nhân viên, bạn có thể sử dụng public
modifier để tạo class Employee
với các thành phần có thể truy cập từ bên ngoài. Dưới đây là một ví dụ:
java
public class Employee {
public String name;
public int employeeId;
public double salary;
public Employee(String name, int employeeId, double salary) {
this.name = name;
this.employeeId = employeeId;
this.salary = salary;
}
public void displayInfo() {
System.out.println("Employee ID: " + employeeId);
System.out.println("Name: " + name);
System.out.println("Salary: $" + salary);
}
}
Trong đoạn code trên, các biến name
, employeeId
, và salary
được đánh dấu là public
, cho phép truy cập trực tiếp từ bên ngoài. Việc sử dụng biến public
không được khuyến khích vì có thể làm giảm tính đóng gói (encapsulation).
2. Modifier Private
Khái Niệm
private
là modifier ngược lại với public
. Nếu một thành phần được đánh dấu là private
, nó chỉ có thể được truy cập từ bên trong cùng một class.
Ví Dụ
Ví dụ, khi phát triển một ứng dụng quản lý tài khoản ngân hàng, bạn có thể sử dụng private
modifier cho các thuộc tính nhạy cảm. Dưới đây là ví dụ:
java
public class BankAccount {
private String accountNumber;
private double balance;
private String ownerName;
private BankAccount(String accountNumber, double initialBalance, String ownerName) {
this.accountNumber = accountNumber;
this.balance = initialBalance;
this.ownerName = ownerName;
}
public static BankAccount createAccount(String accountNumber, double initialBalance, String ownerName) {
return new BankAccount(accountNumber, initialBalance, ownerName);
}
public double getBalance() {
return balance;
}
public void deposit(double amount) {
balance += amount;
}
public void withdraw(double amount) {
if (amount <= balance) {
balance -= amount;
} else {
System.out.println("Không đủ tiền, rút tiền thất bại.");
}
}
}
Trong đoạn code này, các biến được đánh dấu private
, đảm bảo rằng thông tin nhạy cảm không thể truy cập từ bên ngoài. Constructor cũng được đánh dấu là private
để đảm bảo đối tượng chỉ được tạo ra bằng phương thức createAccount
.
3. Modifier Protected
Khái Niệm
protected
là sự kết hợp giữa public
và private
. Nếu một thành phần được đánh dấu là protected
, nó có thể truy cập từ bên trong cùng một class và từ các class con của nó.
Ví Dụ
Trong một ứng dụng quản lý thư viện, bạn có thể sử dụng protected
cho các phương thức chỉ có thể truy cập từ các class con. Ví dụ:
java
public class LibraryItem {
private String title;
private String author;
private int stockQuantity;
public LibraryItem(String title, String author, int stockQuantity) {
this.title = title;
this.author = author;
this.stockQuantity = stockQuantity;
}
protected void updateStock(int newStockQuantity) {
this.stockQuantity = newStockQuantity;
}
public void displayInfo() {
System.out.println("Title: " + title);
System.out.println("Author: " + author);
System.out.println("Stock Quantity: " + stockQuantity);
}
}
Trong ví dụ này, phương thức updateStock
có thể được truy cập từ các lớp con của LibraryItem
, trong khi stockQuantity
được bảo vệ bởi modifier private
.
Đóng Gói Dữ Liệu
Đóng gói dữ liệu (Encapsulation) là một nguyên tắc quan trọng trong lập trình hướng đối tượng. Nó liên quan trực tiếp đến việc sử dụng các visibility modifiers để bảo vệ và quản lý truy cập vào các trường dữ liệu của một class. Đóng gói giúp ẩn chi tiết bên trong của một object và cho phép tương tác thông qua các phương thức công khai.
Lợi Ích Của Đóng Gói Dữ Liệu
- Bảo vệ Dữ liệu: Trường dữ liệu được đóng gói để bảo vệ khỏi việc truy cập trực tiếp.
- Tính Bảo Mật: Đóng gói tăng cường tính bảo mật và bảo vệ thông tin nhạy cảm.
- Bảo Trì và Mở Rộng: Thay đổi cách lưu trữ hoặc xử lý nội bộ mà không làm ảnh hưởng đến các phần khác của hệ thống.
- Tương Thích: Tạo ra giao diện đồng nhất giữa các thành phần, tăng khả năng tái sử dụng.
Kết Luận
Bài viết đã trình bày chi tiết về ba visibility modifiers public
, private
, và protected
trong Java. Mỗi modifier có vai trò quan trọng trong việc quản lý quyền truy cập và đảm bảo tính đóng gói.
public
: Phạm vi truy cập rộng nhất, cho phép truy cập từ mọi nơi.private
: Chỉ cho phép truy cập từ bên trong cùng một class, bảo vệ thông tin nhạy cảm.protected
: Cho phép truy cập từ bên trong cùng một class và các class con.
Chúng ta cũng đã xem xét các ví dụ cụ thể để minh họa cách sử dụng mỗi modifier. Cuối cùng, chúng ta đã thảo luận về lợi ích và tầm quan trọng của đóng gói dữ liệu trong lập trình hướng đối tượng.
source: viblo