ตัวระบุการเข้าถึง ควบคุมการมองเห็นของสมาชิกคลาส โดยบังคับใช้การแคปซูลเลชันผ่านการจำกัดว่าใครสามารถอ่านหรือเรียกมันได้
ตัวระบุการเข้าถึง ควบคุมการมองเห็นของสมาชิกคลาส โดยบังคับใช้การแคปซูลเลชันผ่านการจำกัดว่าใครสามารถอ่านหรือเรียกมันได้
| ตัวระบุ | เข้าถึงได้จาก |
|---|
public | ที่ใดก็ได้ |
protected | คลาส และซับคลาสของมัน |
private | เฉพาะ ภายในคลาสที่ประกาศ |
public class Employee {
private double salary; // internal — only Employee touches it
protected String department; // subclasses may use it
public String name; // open to all
public double getSalary() { // controlled, public read access
return salary;
}
}
salary เป็นแบบ private ดังนั้นโค้ดภายนอกจึงไม่สามารถเสียหายได้ public getter คือหน้าต่างเดียวเข้าไป
class Demo:
def __init__(self):
self.public = 1
self._protected = 2 # convention only ("don't touch")
self.__private = 3 # name-mangled to _Demo__private
Python ไม่มี private ที่บังคับใช้ — มันอาศัยอยู่บนข้อตกลงการตั้งชื่อ Java/C# บังคับใช้ตัวระบุในเวลาคอมไพล์ Java ยังมี package-private (ค่าเริ่มต้น ไม่มีคีย์เวิร์ด)
การทำให้ทุกอย่าง public ทำลายการแคปซูลเลชัน เริ่มต้นด้วยระดับ ที่มีข้อจำกัดมากที่สุด และขยายเฉพาะเมื่อมีความต้องการจริง
ตัวระบุการเข้าถึงเป็นเครื่องมือที่เป็นรูปธรรมที่เปลี่ยนการแคปซูลเลชันจากหลักการเป็นกฎที่คอมไพเลอร์ตรวจสอบ
พื้นผิวสาธารณะขนาดเล็กหมายความว่าโค้ดที่น้อยกว่านั้นขึ้นอยู่กับส่วนภายใน ดังนั้นคุณสามารถปรับปรุงใหม่ได้อย่างอิสระโดยไม่ทำให้ผู้เรียกล้มเหลว