जावा 8 में, इंटरफेस में लागू किए गए तरीके, स्थिर तरीके और तथाकथित "डिफ़ॉल्ट" विधियां हो सकती हैं (जो कि कार्यान्वयन कक्षाओं को ओवरराइड करने की आवश्यकता नहीं है)।
मेरे (शायद भोले) दृश्य में, इस तरह इंटरफेस का उल्लंघन करने की कोई आवश्यकता नहीं थी। इंटरफेस हमेशा एक अनुबंध होता है जिसे आपको पूरा करना चाहिए, और यह एक बहुत ही सरल और शुद्ध अवधारणा है। अब यह कई चीजों का मिश्रण है। मेरी राय में:
- स्थिर विधियाँ इंटरफेस से संबंधित नहीं हैं। वे उपयोगिता वर्गों से संबंधित हैं।
- "डिफ़ॉल्ट" विधियों को इंटरफेस में बिल्कुल भी अनुमति नहीं दी जानी चाहिए। आप हमेशा इस उद्देश्य के लिए एक अमूर्त वर्ग का उपयोग कर सकते हैं।
संक्षेप में:
जावा 8 से पहले:
- आप स्थैतिक और डिफ़ॉल्ट तरीके प्रदान करने के लिए अमूर्त और नियमित कक्षाओं का उपयोग कर सकते हैं। इंटरफेस की भूमिका स्पष्ट है।
- एक इंटरफ़ेस में सभी तरीकों को कक्षाओं को लागू करने से अलग किया जाना चाहिए।
- आप सभी कार्यान्वयनों को संशोधित किए बिना एक इंटरफ़ेस में एक नई विधि नहीं जोड़ सकते हैं, लेकिन यह वास्तव में एक अच्छी बात है।
जावा 8 के बाद:
- वस्तुतः एक इंटरफ़ेस और एक अमूर्त वर्ग (एकाधिक विरासत के अलावा) के बीच कोई अंतर नहीं है। वास्तव में आप इंटरफ़ेस के साथ एक नियमित वर्ग का अनुकरण कर सकते हैं।
- कार्यान्वयन की प्रोग्रामिंग करते समय, प्रोग्रामर डिफ़ॉल्ट विधियों को ओवरराइड करना भूल सकते हैं।
- यदि एक वर्ग एक ही हस्ताक्षर के साथ एक डिफ़ॉल्ट विधि वाले दो या अधिक इंटरफेस को लागू करने का प्रयास करता है तो एक संकलन त्रुटि होती है।
- एक इंटरफ़ेस में एक डिफ़ॉल्ट विधि जोड़कर, प्रत्येक कार्यान्वयन वर्ग स्वचालित रूप से इस व्यवहार को इनहेरिट करता है। हो सकता है कि इनमें से कुछ कक्षाएं उस नई कार्यक्षमता को ध्यान में रखकर नहीं बनाई गई हों, और यह समस्याएँ पैदा कर सकती हैं। उदाहरण के लिए, यदि कोई
default void foo()
इंटरफ़ेस में एक नई डिफ़ॉल्ट विधि जोड़ता हैIx
, तो उसी हस्ताक्षर के साथ निजी पद्धति कोCx
लागू करनेIx
और रखने वाला वर्गfoo
संकलित नहीं करता है।
इस तरह के बड़े बदलावों के मुख्य कारण क्या हैं और वे क्या नए लाभ (यदि कोई हैं) जोड़ते हैं?
@Deprecated
श्रेणी में हैं! अज्ञानता और आलस्य के कारण स्थैतिक विधियाँ जावा में सबसे अधिक दुरुपयोग की जाने वाली रचनाओं में से एक हैं। स्थैतिक तरीकों के बहुत से आमतौर पर अक्षम प्रोग्रामर का अर्थ है, परिमाण के कई आदेशों द्वारा युग्मन में वृद्धि और यूनिट टेस्ट और रिफ्लेक्टर के लिए एक बुरा सपना है जब आपको पता चलता है कि वे एक बुरा विचार क्यों हैं!