जैसा कि अन्य उत्तरों में बताया गया है, कलेक्शन फ्रेमवर्क में पिछड़ी संगतता प्रदान करने के लिए एक इंटरफ़ेस में कार्यान्वयन को जोड़ने की क्षमता जोड़ी गई थी। मेरा तर्क है कि पिछड़े अनुकूलता प्रदान करना संभवतः इंटरफ़ेस में कार्यान्वयन को जोड़ने का एकमात्र अच्छा कारण है।
अन्यथा, यदि आप किसी इंटरफ़ेस में कार्यान्वयन जोड़ते हैं , तो आप मौलिक कानून को तोड़ रहे हैं, क्योंकि पहले स्थान पर इंटरफेस क्यों जोड़े गए थे। जावा, C + के विपरीत एक एकल वंशानुक्रम भाषा है, जो एकाधिक वंशानुक्रम के लिए अनुमति देता है। Interfaces टाइपिंग के लाभ प्रदान करते हैं जो एक ऐसी भाषा के साथ आते हैं जो एकाधिक वंशानुक्रम के साथ आने वाली समस्याओं का परिचय दिए बिना एकाधिक वंशानुक्रम का समर्थन करती है।
विशेष रूप से, जावा केवल कार्यान्वयन के एकल वंशानुक्रम की अनुमति देता है, लेकिन यह इंटरफेस के कई वंशानुक्रम की अनुमति देता है। उदाहरण के लिए, निम्न मान्य जावा कोड है:
class MyObject extends String implements Runnable, Comparable { ... }
MyObject
केवल एक कार्यान्वयन विरासत में मिला है, लेकिन यह तीन अनुबंधों को विरासत में मिला है।
जावा कार्यान्वयन के कई उत्तराधिकार पर पारित हुआ क्योंकि कार्यान्वयन के कई वंशानुक्रम कांटेदार समस्याओं के एक मेजबान के साथ आते हैं, जो इस उत्तर के दायरे से बाहर हैं। कार्यान्वयन की कई विरासत की समस्याओं के बिना अनुबंधों के कई वंशानुक्रम (उर्फ इंटरफेस) की अनुमति देने के लिए इंटरफेस जोड़े गए थे।
मेरी बात का समर्थन करने के लिए, केन अर्नोल्ड और जेम्स गोस्लिंग की पुस्तक द जावा प्रोग्रामिंग लैंग्वेज, 4 संस्करण से एक उद्धरण दिया गया है :
सिंगल इनहेरिटेंस कुछ उपयोगी और सही डिज़ाइन पेश करता है। एकाधिक वंशानुक्रम की समस्याएं कार्यान्वयन के कई वंशानुक्रम से उत्पन्न होती हैं, लेकिन कई मामलों में कई विरासत का उपयोग कई सार अनुबंधों और शायद एक ठोस कार्यान्वयन को प्राप्त करने के लिए किया जाता है। एक कार्यान्वयन के वारिस के बिना एक सार अनुबंध प्राप्त करने का साधन प्रदान करना कई कार्यान्वयन वंशानुक्रम की समस्याओं के बिना कई विरासत के टाइपिंग लाभ की अनुमति देता है। अमूर्त अनुबंध की विरासत को इंटरफ़ेस विरासत कहा जाता
है । जावा प्रोग्रामिंग भाषा आपको एक interface
प्रकार की घोषणा करने की अनुमति देकर इंटरफ़ेस वंशानुक्रम का समर्थन करती है