หนึ่งในสิ่งแรกที่ฉันทำเมื่อฉันคลาสย่อยคลาสคือการเปลี่ยนวิธีการส่วนตัวเพื่อป้องกัน
เหตุผลบางประการเกี่ยวprivateกับกับprotected วิธีการ :
privateวิธีการป้องกันการใช้รหัสซ้ำ คลาสย่อยไม่สามารถใช้รหัสในวิธีส่วนตัวและอาจต้องใช้อีกครั้ง - หรือนำวิธีการนั้นมาใช้ใหม่ซึ่งเดิมขึ้นอยู่กับวิธีการส่วนตัว & c
ในทางกลับกันวิธีการใด ๆ ที่ไม่ privateสามารถมองเห็นได้ว่าเป็น API ที่จัดทำโดยชั้นเรียนถึง "โลกภายนอก" ในแง่ที่ว่า subclasses ของบุคคลที่สามได้รับการพิจารณาว่าเป็น "โลกภายนอก" ด้วยเช่นกัน แล้ว.
นั่นเป็นสิ่งที่ไม่ดีเหรอ? - ฉันไม่คิดอย่างนั้น
แน่นอน API สาธารณะ (หลอก) จะล็อคโปรแกรมเมอร์ดั้งเดิมขึ้นมาและขัดขวางการสร้างอินเทอร์เฟซเหล่านั้นใหม่ แต่เห็นวิธีอื่น ๆ แล้วทำไมโปรแกรมเมอร์ไม่ควรออกแบบ "รายละเอียดการใช้งาน" ของเขาเองในแบบที่สะอาดและเสถียรเหมือน API สาธารณะ เขาควรใช้privateเพื่อให้เขาเลอะเทอะเกี่ยวกับการสร้างรหัส "ส่วนตัว" ของเขาหรือไม่? กำลังคิดว่าเขาจะทำความสะอาดภายหลังเพราะไม่มีใครสังเกตเห็น? - เลขที่
โปรแกรมเมอร์ควรนำความคิดเล็ก ๆ น้อย ๆ มาใส่ในรหัส "ส่วนตัว" ของเขาเช่นกันเพื่อจัดโครงสร้างในลักษณะที่อนุญาตหรือแม้กระทั่งส่งเสริมการใช้ซ้ำมากที่สุดเท่าที่จะทำได้ในตอนแรก จากนั้นส่วนที่ไม่ใช่ภาคเอกชนอาจไม่เป็นภาระมากในอนาคตเช่นเดียวกับความกลัว
รหัส (เฟรมเวิร์ก) จำนวนมากที่ฉันเห็นมีการใช้ที่ไม่สอดคล้องกันของprivate: protectedวิธีการที่ไม่ใช่ขั้นตอนสุดท้ายซึ่งแทบจะไม่ทำอะไรมากกว่าการมอบหมายวิธีการส่วนตัว protectedไม่ใช่วิธีการสุดท้ายที่สัญญาสามารถบรรลุได้ผ่านการเข้าถึงโดยตรงไปยังเขตข้อมูลส่วนตัวด้วย
วิธีการเหล่านี้ไม่สามารถแทนที่ / ปรับปรุงอย่างมีเหตุผลแม้ว่าในทางเทคนิคแล้วไม่มีสิ่งใดที่จะทำให้ (คอมไพเลอร์ -) ชัดเจน
ต้องการความสามารถในการขยายและการรับมรดก privateอย่าทำให้วิธีการของคุณ
ไม่ต้องการให้พฤติกรรมบางอย่างในชั้นเรียนของคุณเปลี่ยนไปหรือไม่? finalทำให้วิธีการของคุณ
จริง ๆ แล้วไม่สามารถเรียกวิธีการของคุณนอกบริบทที่กำหนดชัดเจน ทำให้วิธีการของคุณprivateและ / หรือคิดเกี่ยวกับวิธีที่คุณสามารถทำให้บริบทที่กำหนดไว้อย่างดีที่จำเป็นสำหรับการใช้ซ้ำผ่านprotectedวิธีการ wrapper อื่น
นั่นเป็นเหตุผลที่ฉันสนับสนุนให้ใช้privateเท่าที่จำเป็น และเพื่อไม่ให้เกิดความสับสนกับprivate final- หากวิธีการใช้งานมีความสำคัญต่อสัญญาทั่วไปของชั้นเรียนและดังนั้นจึงไม่ต้องถูกแทนที่ / แทนที่ให้ทำfinal!
สำหรับสาขาที่privateไม่เลวจริงๆ ตราบใดที่เขตข้อมูลสามารถ "ใช้" อย่างสมเหตุสมผลด้วยวิธีการที่เหมาะสม ( ไม่ใช่ getXX()หรือsetXX()!)