Access modifier kiểm soát khả năng nhìn thấy (visibility) của các thành viên class, thực thi encapsulation bằng cách hạn chế ai có thể đọc hoặc gọi chúng.
Access modifier kiểm soát khả năng nhìn thấy (visibility) của các thành viên class, thực thi encapsulation bằng cách hạn chế ai có thể đọc hoặc gọi chúng.
| Modifier | Truy cập được từ |
|---|
public | Bất cứ đâu |
protected | Chính class và các subclass của nó |
private | Chỉ bên trong class khai báo |
public class Employee {
private double salary; // nội bộ — chỉ Employee chạm tới
protected String department; // các subclass có thể dùng
public String name; // mở cho tất cả
public double getSalary() { // quyền đọc công khai, được kiểm soát
return salary;
}
}
salary là private nên không code bên ngoài nào có thể làm hỏng nó; getter public là cửa sổ duy nhất nhìn vào.
class Demo:
def __init__(self):
self.public = 1
self._protected = 2 # chỉ là quy ước ("đừng chạm vào")
self.__private = 3 # bị đổi tên (name-mangle) thành _Demo__private
Python không thực thi private — nó dựa vào quy ước đặt tên. Java/C# thực thi modifier lúc compile-time. Java còn có package-private (mặc định, không từ khóa).
Để mọi thứ thành public làm vô hiệu hóa encapsulation. Hãy mặc định ở mức hạn chế nhất và chỉ nới rộng khi có nhu cầu thực sự.
Access modifier là công cụ cụ thể biến encapsulation từ một nguyên tắc thành một quy tắc được thực thi mà compiler kiểm tra.
Một bề mặt public nhỏ nghĩa là ít code có thể phụ thuộc vào nội bộ hơn, nên bạn có thể refactor thoải mái mà không phá vỡ bên gọi.