บางครั้ง การใช้คลาสที่มีเพียงเมธอดคงที่และฟิลด์คงที่ก็อาจมีประโยชน์
ตัวอย่างเช่น เราสามารถใช้คลาสยูทิลิตี้ เช่น java.lang.Math, java.util.Arrays ซึ่งรวบรวมเมธอดที่เกี่ยวข้องกับการคำนวณทางคณิตศาสตร์และอาร์เรย์ หรือ java.util.Collections ซึ่งรวบรวมเมธอดคงที่แบบ Factory ที่สร้างออบเจ็กต์ที่ใช้อินเทอร์เฟซบางอย่าง
คลาสยูทิลิตี้เหล่านี้ไม่จำเป็นต้องมีตัวแปรอินสแตนซ์หรือเมธอดอื่นๆ ดังนั้นจึงไม่จำเป็นต้องมีคอนสตรัคเตอร์ แต่ถ้าเราไม่ระบุคอนสตรัคเตอร์ ภาษาคอมไพเลอร์จะสร้างคอนสตรัคเตอร์แบบ public ให้โดยอัตโนมัติ ซึ่งทำให้ผู้ใช้ไม่สามารถแยกแยะได้ว่าคอนสตรัคเตอร์นี้สร้างขึ้นโดยอัตโนมัติหรือไม่
เพื่อป้องกันปัญหานี้ บางครั้งเราอาจใช้คลาสแอ็บสแทร็กต์ แต่คลาสแอ็บสแทร็กต์ไม่สามารถป้องกันการสร้างอินสแตนซ์ได้ เนื่องจากสามารถสร้างคลาสย่อยแล้วสร้างอินสแตนซ์ได้อยู่ดี
ดังนั้น เพื่อป้องกันการสร้างอินสแตนซ์ของคลาสยูทิลิตี้ เราจึงต้องตั้งค่าตัวดัดแปลงการเข้าถึงของคอนสตรัคเตอร์เป็น private
ถ้าคอนสตรัคเตอร์มีตัวดัดแปลงการเข้าถึงเป็น private คลาสภายนอกจะไม่สามารถเข้าถึงได้ และถ้ามีการเรียกใช้คอนสตรัคเตอร์จากภายใน จะทำให้เกิดข้อยกเว้น
การใช้คอนสตรัคเตอร์แบบ private อาจทำให้ผู้ใช้เข้าใจคอนสตรัคเตอร์ได้ยาก ดังนั้นควรเพิ่มคำอธิบายประกอบไว้ด้วย นอกจากนี้ การตั้งค่าคอนสตรัคเตอร์เป็น private ยังมีผลทำให้ไม่สามารถสืบทอดคลาสได้อีกด้วย
ความคิดเห็น0