แม้ว่าเหตุผลที่ยกมาบ่อยๆคือ "อินเทอร์เฟซกำหนด API สาธารณะ" แต่ฉันคิดว่านั่นเป็นการทำให้เข้าใจง่ายเกินไป (และมัน "มีกลิ่น" ของตรรกะแบบวงกลมด้วย)
มันจะไม่มีความหมายที่จะมีอินเทอร์เฟซที่มีส่วนผสมของตัวปรับแต่งการเข้าถึง เช่นสาธารณะบางส่วนและบางส่วน จำกัด เฉพาะคลาสอื่น ๆ ในแพ็คเกจเดียวกันกับอินเทอร์เฟซ ในความเป็นจริงในบางกรณีสิ่งนี้อาจเป็นประโยชน์ IMO
จริงๆแล้วฉันคิดว่าส่วนหนึ่งของการให้เหตุผลเบื้องหลังการทำให้สมาชิกของอินเทอร์เฟซเป็นสาธารณะโดยปริยายคือมันทำให้ภาษา Java ง่ายขึ้น :
สมาชิกอินเทอร์เฟซสาธารณะโดยปริยายนั้นง่ายกว่าสำหรับโปรแกรมเมอร์ที่จะจัดการกับ คุณเห็นโค้ด (คลาส) กี่ครั้งที่ตัวปรับการเข้าถึงเมธอดถูกเลือกแบบสุ่ม โปรแกรมเมอร์ "ธรรมดา" จำนวนมากมีปัญหาในการทำความเข้าใจวิธีจัดการขอบเขตนามธรรมของ Java ให้ดีที่สุด1 . การเพิ่มสาธารณะ / ป้องกัน / แพ็กเกจส่วนตัวในอินเทอร์เฟซทำให้ยากขึ้นสำหรับพวกเขา
สมาชิกอินเทอร์เฟซสาธารณะโดยปริยายทำให้ข้อกำหนดภาษาง่ายขึ้น ... และด้วยเหตุนี้งานสำหรับผู้เขียนคอมไพเลอร์ Java และผู้ที่ใช้ Reflection API
แนวความคิดที่ว่า "อินเทอร์เฟซกำหนด API สาธารณะ" เป็นผลมาจาก (หรือลักษณะเฉพาะ) ของการตัดสินใจออกแบบภาษาที่ง่ายขึ้น ... ไม่ใช่วิธีอื่น แต่ในความเป็นจริงความคิดทั้งสองแนวอาจพัฒนาควบคู่กันไปในความคิดของนักออกแบบ Java
ไม่ว่าในกรณีใดก็ตามการตอบสนองอย่างเป็นทางการต่อ RFE ในJDK-8179193ทำให้ชัดเจนว่าทีมออกแบบ Java ตัดสินใจ2ว่าการอนุญาตให้protected
ใช้อินเทอร์เฟซจะเพิ่มความซับซ้อนเพื่อประโยชน์ที่แท้จริงเพียงเล็กน้อย รุ่งโรจน์เพื่อ @skomisa สำหรับการหาหลักฐาน
หลักฐานใน RFE ช่วยแก้ปัญหาได้ นั่นคือเหตุผลอย่างเป็นทางการว่าทำไมจึงไม่มีการเพิ่ม
1 - แน่นอนว่าโปรแกรมเมอร์มือฉมังไม่มีปัญหากับสิ่งเหล่านี้และอาจยินดีต้อนรับคุณสมบัติการควบคุมการเข้าถึงที่สมบูรณ์ยิ่งขึ้น แต่จะเกิดอะไรขึ้นเมื่อรหัสของพวกเขาถูกส่งไปให้คนอื่นรักษา?
2 - คุณอาจไม่เห็นด้วยกับการตัดสินใจของพวกเขาหรือการให้เหตุผลของพวกเขา แต่นั่นเป็นเรื่องที่น่าสงสัย