यद्यपि अक्सर उद्धृत कारण यह है कि "इंटरफेस सार्वजनिक एपीआई को परिभाषित करते हैं", मुझे लगता है कि यह एक अति-सरलीकरण है। (और यह परिपत्र तर्क की "गंध" भी है।)
एक्सेस मॉडिफ़ायर का मिश्रण होने वाले इंटरफेस के लिए यह अर्थहीन नहीं होगा; उदाहरण के लिए इंटरफ़ेस के रूप में एक ही पैकेज में आंशिक रूप से सार्वजनिक और आंशिक रूप से अन्य वर्गों के लिए प्रतिबंधित है। वास्तव में, कुछ मामलों में यह निम्न-उपयोगी हो सकता है, IMO।
दरअसल, मुझे लगता है कि इंटरफ़ेस के सदस्यों को सार्वजनिक रूप से बनाने के पीछे तर्क का हिस्सा यह है कि यह जावा भाषा को सरल बनाता है :
स्पष्ट रूप से सार्वजनिक इंटरफ़ेस सदस्य प्रोग्रामर से निपटने के लिए सरल हैं। आपने कितनी बार कोड (कक्षाएं) देखी हैं जहां विधि अभिगम संशोधक यादृच्छिक रूप से प्रतीत होते हैं? बहुत सारे "साधारण" प्रोग्रामर को यह समझने में कठिनाई होती है कि जावा एब्स्ट्रेक्शन सीमाओं 1 को कैसे प्रबंधित किया जाए । सार्वजनिक / संरक्षित / पैकेज-निजी को इंटरफेस में जोड़ना उनके लिए और भी कठिन हो जाता है।
अवैध रूप से सार्वजनिक इंटरफ़ेस सदस्य भाषा विनिर्देशन को सरल करते हैं ... और इसलिए जावा संकलक लेखकों के लिए कार्य, और जो लोग प्रतिबिंब एपीआई को लागू करते हैं।
यह सोचने की पंक्ति कि "इंटरफेस सार्वजनिक एपीआई को परिभाषित करते हैं" यकीनन सरल भाषा डिजाइन निर्णय का एक परिणाम (या विशेषता) है ... अन्य तरीके से नहीं। लेकिन वास्तव में, जावा डिजाइनरों के मन में समानांतर रूप से विचार की दो पंक्तियों का विकास हुआ।
किसी भी दर पर, JDK-8179193 में RFE के लिए आधिकारिक प्रतिक्रिया यह स्पष्ट करती है कि जावा डिजाइन टीम ने 2 का फैसला किया है कि protected
इंटरफेस पर अनुमति देना थोड़ा वास्तविक लाभ के लिए जटिलता जोड़ता है। सबूत खोजने के लिए कुडोस से @skomisa ।
RFE में साक्ष्य मुद्दे को सुलझाता है। यह आधिकारिक कारण है कि क्यों नहीं जोड़ा गया है।
1 - बेशक, टॉप-गन प्रोग्रामर्स को इन चीजों से कोई कठिनाई नहीं है, और एक्सेस कंट्रोल सुविधाओं के समृद्ध पैलेट का स्वागत कर सकते हैं। लेकिन, क्या होता है जब उनके कोड को बनाए रखने के लिए किसी और को सौंप दिया जाता है?
2 - आप उनके निर्णय या उनके बताए गए तर्क से असहमत हो सकते हैं लेकिन यह गलत है।