การห่อหุ้มด้วยจาวา
การห่อหุ้ม
ความหมายของEncapsulationคือการทำให้แน่ใจว่าข้อมูลที่ "ละเอียดอ่อน" ถูกซ่อนจากผู้ใช้ เพื่อให้บรรลุสิ่งนี้ คุณต้อง:
- ประกาศตัวแปรคลาส/แอตทริบิวต์เป็น
private
- ให้สาธารณะได้รับ
และกำหนดวิธีการในการเข้าถึงและปรับปรุงค่าของ
private
ตัวแปร
รับและตั้งค่า
คุณได้เรียนรู้จากบทที่แล้วว่าprivate
ตัวแปรสามารถเข้าถึงได้ภายในคลาสเดียวกันเท่านั้น (คลาสภายนอกไม่สามารถเข้าถึงได้) อย่างไรก็ตาม สามารถเข้าถึงได้หากเราจัดเตรียมวิธีการรับและตั้งค่าแบบสาธารณะ
วิธี การget
คืนค่าตัวแปรและset
วิธีการตั้งค่า
ไวยากรณ์สำหรับทั้งคู่คือพวกเขาเริ่มต้นด้วยget
หรือset
ตามด้วยชื่อของตัวแปรโดยมีตัวอักษรตัวแรกเป็นตัวพิมพ์ใหญ่:
ตัวอย่าง
public class Person {
private String name; // private = restricted access
// Getter
public String getName() {
return name;
}
// Setter
public void setName(String newName) {
this.name = newName;
}
}
ตัวอย่างอธิบาย
วิธี การget
ส่งกลับค่าของname
ตัวแปร
เมธอด รับset
พารามิเตอร์ ( newName
) และกำหนดให้กับ
name
ตัวแปร คีย์เวิร์ด ใช้this
เพื่ออ้างถึงอ็อบเจ็กต์ปัจจุบัน
อย่างไรก็ตาม เนื่องจากname
ตัวแปรถูกประกาศเป็นprivate
เรา
ไม่สามารถเข้าถึงได้จากภายนอกคลาสนี้:
ตัวอย่าง
public class Main {
public static void main(String[] args) {
Person myObj = new Person();
myObj.name = "John"; // error
System.out.println(myObj.name); // error
}
}
หากตัวแปรถูกประกาศเป็นpublic
เราจะคาดหวังผลลัพธ์ต่อไปนี้:
John
อย่างไรก็ตาม เมื่อเราพยายามเข้าถึงprivate
ตัวแปร เราพบข้อผิดพลาด:
MyClass.java:4: error: name has private access in Person
myObj.name = "John";
^
MyClass.java:5: error: name has private access in Person
System.out.println(myObj.name);
^
2 errors
เราใช้getName()
and setName()
method ในการเข้าถึงและอัปเดตตัวแปรแทน:
ตัวอย่าง
public class Main {
public static void main(String[] args) {
Person myObj = new Person();
myObj.setName("John"); // Set the value of the name variable to "John"
System.out.println(myObj.getName());
}
}
// Outputs "John"
ทำไมต้องห่อหุ้ม?
- ควบคุมแอตทริบิวต์และเมธอดของคลาสได้ดีขึ้น
- แอตทริบิวต์ของคลาสสามารถทำให้เป็นแบบอ่านอย่างเดียว (หากคุณใช้
get
เมธอดเท่านั้น) หรือเขียนอย่างเดียว (หากคุณใช้set
เมธอดเท่านั้น) - ยืดหยุ่นได้: โปรแกรมเมอร์สามารถเปลี่ยนโค้ดได้ส่วนหนึ่งโดยไม่กระทบส่วนอื่นๆ
- เพิ่มความปลอดภัยของข้อมูล