อะไรคือสาธารณะส่วนตัวและได้รับการปกป้องในการเขียนโปรแกรมเชิงวัตถุ


คำตอบ:


154

เป็นตัวแก้ไขการเข้าถึงและช่วยเราใช้Encapsulation (หรือการซ่อนข้อมูล) พวกเขาบอกคอมไพเลอร์ว่าคลาสอื่น ๆ ควรมีสิทธิ์เข้าถึงฟิลด์หรือวิธีการที่กำหนด

private - เฉพาะคลาสปัจจุบันเท่านั้นที่สามารถเข้าถึงฟิลด์หรือเมธอดได้

protected - เฉพาะคลาสปัจจุบันและคลาสย่อย (และบางครั้งก็เป็นคลาสแพ็กเกจเดียวกัน) ของคลาสนี้เท่านั้นที่จะสามารถเข้าถึงฟิลด์หรือเมธอดได้

public - คลาสใด ๆ สามารถอ้างถึงฟิลด์หรือเรียกใช้เมธอด

สิ่งนี้ถือว่าคีย์เวิร์ดเหล่านี้ถูกใช้เป็นส่วนหนึ่งของการประกาศฟิลด์หรือเมธอดภายในนิยามคลาส


4
โปรดทราบว่าในสมาชิก java ของแพ็คเกจเดียวกันสามารถเข้าถึงสมาชิกที่ได้รับการป้องกัน
Landon Kuhn

2
ใช่และ Java ยังมีตัวปรับการเข้าถึงที่สี่ซึ่งเป็นสตริงว่าง การไม่ให้ตัวแก้ไขการเข้าถึงใด ๆ จะทำให้สามารถเข้าถึงได้จากคลาสระดับแพ็คเกจใด ๆ
Ben S

1
ฉันชอบส่วน "คอมไพเลอร์" เพราะภาษาส่วนใหญ่ที่ฉันรู้ว่าฟังก์ชัน / คลาสทั้งหมดสามารถเข้าถึงได้ง่ายที่รันไทม์เช่นผ่านการสะท้อนใน. NET ดังนั้นฉันมักจะพูดว่าตัวปรับแต่งการเข้าถึงเหล่านี้เป็นเพียงความช่วยเหลือสำหรับโปรแกรมเมอร์ในการแนะนำโปรแกรมเมอร์คนอื่น ๆ ที่ทำงานกับ / ด้วยรหัสเดียวกันโดยการซ่อนบางสิ่ง
merkuro

1
บางภาษามีลักษณะเฉพาะบางประการ เช่นเดียวกับใน Delphi สมาชิกส่วนตัวสามารถเข้าถึงได้โดยคลาสอื่น ๆ ในหน่วยเดียวกันและคุณต้องใช้ private ที่เข้มงวดหากคุณไม่ต้องการพฤติกรรมนี้
Fabio Gomes

1
C # ยังใช้เคล็ดลับการเข้าถึงที่มีการป้องกันสมาชิกในแพ็กเกจเดียวกัน โดยพื้นฐานแล้ว C # เป็นเพียง Java ของ Microsoft
iGbanam

7

ทั้งสามเป็นตัวแก้ไขการเข้าถึงและคีย์เวิร์ดที่ใช้ในคลาส ทุกสิ่งที่ประกาศในที่สาธารณะสามารถใช้โดยอ็อบเจ็กต์ใดก็ได้ภายในคลาสหรือนอกคลาสตัวแปรในไพรเวตสามารถใช้ได้โดยอ็อบเจ็กต์ภายในคลาสเท่านั้นและไม่สามารถเปลี่ยนแปลงได้ผ่านการเข้าถึงโดยตรง (เนื่องจากสามารถเปลี่ยนผ่านฟังก์ชันเช่นฟังก์ชันเพื่อน) ทุกสิ่งที่กำหนดไว้ภายใต้ส่วนที่มีการป้องกันสามารถใช้ได้โดยคลาสและคลาสที่ได้รับมา


6

ไม่ใช่แนวคิดที่แท้จริง แต่เป็นคำหลักที่เฉพาะเจาะจงซึ่งมักจะเกิดขึ้น (มีความหมายต่างกันเล็กน้อย) ในภาษายอดนิยมเช่น C ++ และ Java

โดยพื้นฐานแล้วพวกเขามีจุดมุ่งหมายเพื่อให้ชั้นเรียนสามารถ จำกัด การเข้าถึงสมาชิกได้ แนวคิดก็คือยิ่งประเภทหนึ่งได้รับอนุญาตให้เข้าถึงในประเภทอื่นน้อยลงก็จะสามารถสร้างการพึ่งพาได้น้อยลง สิ่งนี้ช่วยให้สามารถเปลี่ยนอ็อบเจ็กต์ที่เข้าถึงได้ง่ายขึ้นโดยไม่ส่งผลกระทบต่ออ็อบเจ็กต์ที่อ้างถึง

โดยทั่วไปแล้วสาธารณะหมายความว่าทุกคนได้รับอนุญาตให้เข้าถึงหมายความว่าส่วนตัวที่อนุญาตให้สมาชิกในคลาสเดียวกันเท่านั้นเข้าถึงได้และวิธีการป้องกันที่อนุญาตให้สมาชิกคลาสย่อยได้รับอนุญาตด้วย อย่างไรก็ตามแต่ละภาษาจะเพิ่มสิ่งต่างๆของตัวเองเข้าไปในสิ่งนี้ ตัวอย่างเช่น C ++ อนุญาตให้คุณสืบทอดแบบไม่เปิดเผยต่อสาธารณะ ใน Java ยังมีระดับการเข้าถึงเริ่มต้น (แพ็คเกจ) และมีกฎเกี่ยวกับคลาสภายในเป็นต้น


2

สิ่งของสาธารณะคือสิ่งของที่สามารถเข้าถึงได้จากชั้นเรียนอื่น ๆ คุณต้องรู้ว่ามันคือวัตถุอะไรและคุณสามารถใช้ตัวดำเนินการจุดเพื่อเข้าถึงได้ ได้รับการป้องกันหมายความว่าคลาสและคลาสย่อยสามารถเข้าถึงตัวแปรได้ แต่ไม่ใช่คลาสอื่น ๆ พวกเขาจำเป็นต้องใช้ getter / setter เพื่อทำอะไรกับตัวแปร ไพรเวตหมายความว่ามีเพียงคลาสนั้นเท่านั้นที่สามารถเข้าถึงตัวแปรได้โดยตรงทุกอย่างจำเป็นต้องมีเมธอด / ฟังก์ชันเพื่อเข้าถึงหรือเปลี่ยนแปลงข้อมูลนั้น หวังว่านี่จะช่วยได้


1

ข้างต้น แต่ในเชิงคุณภาพ:

private - least access, best encapsulation
protected - some access, moderate encapsulation
public - full access, no encapsulation

การเข้าถึงที่น้อยลงคุณให้รายละเอียดการใช้งานน้อยลงที่รั่วไหลออกจากวัตถุของคุณ การรั่วไหลที่น้อยลงหมายถึงความยืดหยุ่นมากขึ้น (หรือที่เรียกว่า "การมีเพศสัมพันธ์แบบหลวม ๆ ") ในแง่ของการเปลี่ยนวิธีการใช้งานวัตถุโดยไม่ทำลายไคลเอนต์ของวัตถุ นี่เป็นสิ่งพื้นฐานอย่างแท้จริงที่ต้องเข้าใจ


0

สรุปได้ว่าในการเขียนโปรแกรมเชิงวัตถุทุกอย่างถูกจำลองเป็นคลาสและวัตถุ ชั้นเรียนประกอบด้วยคุณสมบัติและวิธีการ คีย์เวิร์ดสาธารณะส่วนตัวและได้รับการป้องกันใช้เพื่อระบุการเข้าถึงสมาชิกเหล่านี้ (คุณสมบัติและวิธีการ) ของคลาสจากคลาสอื่น ๆ หรือ. dll อื่น ๆ หรือแม้แต่แอพพลิเคชั่นอื่น ๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.