जावा 8 के साथ शुरू, defaultविधियों को इंटरफेस में पेश किया गया था। प्रभावी रूप से, इसका मतलब है कि सभी तरीके एक में नहीं interfaceहैं abstract।
जावा 9 (शायद) के साथ शुरू, privateविधियों की अनुमति होगी। इसका मतलब है कि सभी तरीके एक नहीं interfaceहैं public abstract।
सवाल "क्या जावा इंटरफ़ेस में तरीकों को publicएक्सेस संशोधक के साथ या बिना घोषित किया जाना चाहिए ?" स्टैक ओवरफ्लो में /programming/161633/should-methods-in-a-java-interface-be-declared-with-or-without-a-public-access-m पर पूछा गया था
वहाँ, अधिकांश उत्तरों ने तर्क दिया कि public abstractइसका उपयोग नहीं किया जाना चाहिए क्योंकि कैन में कोई भी विधि interfaceइसके अलावा और कुछ नहीं हो सकती है public abstract। अब यह मामला नहीं है।
तो, इंटरफेस की इन नई विशेषताओं के प्रकाश में, क्या public abstractजावा इंटरफेस विधि घोषणा में कीवर्ड का उपयोग किया जाना चाहिए ?
मेरे विशिष्ट वातावरण में, हमारे पास ऐसे लोग होंगे जो अनुभवी सॉफ्टवेयर इंजीनियर हैं, लेकिन जावा में अनुभवी नहीं हैं, समय-समय पर जावा कोड पढ़ते हैं। मुझे लगता है कि public abstractकीवर्ड छोड़ने से अब उन लोगों के लिए भ्रम का एक अतिरिक्त बिंदु बन जाएगा, जो इन कीवर्ड के उपयोग के लिए अलग-अलग नियम होने के इतिहास से परिचित नहीं हैं।
abstractहोने की स्थिति तेजी से जटिल होती जा रही है। जावा 9 में, कि एक ही वाक्य हो सकता है, "एक इंटरफेस विधि एक कमी defaultसंशोधक या एक staticसंशोधक या एक privateआपरिवर्तक परोक्ष सार है ..." इसके अतिरिक्त, स्पष्ट रूप से कीवर्ड इस्तेमाल नहीं करने के लिए सहायक तर्क, अर्थात्, सभी इंटरफ़ेस तरीके हैं कि public abstract, अब मूट हैं।
streamकरने के लिए java.util.Collection, या Map.getOrDefault()। वैकल्पिक एक नया उप-इंटरफ़ेस बनाना है, और सभी को नीचे की ओर लाना है, जैसे कि ग्राफिक्स 2 डी, और किसी को भी मज़ा नहीं आया!
defaultसंशोधक या एकstaticसंशोधक की कमी होती हैabstract... यह अनुमति है, लेकिन शैली के रूप में हतोत्साहित करने केabstractलिए, इस तरह की विधि घोषणा के लिए संशोधक को स्पष्ट रूप से निर्दिष्ट करें । " आप क्यों उम्मीद करते हैं कि चीजें बदलनी चाहिए?