Free tutorials & notes in Hindi & English · Clean code examples 🧰 मुफ़्त PDF और फ़ोटो टूल्स →
📘 Lesson  ·  Lesson 34

Why No Multiple Inheritance

Multiple inheritance क्या है

Multiple inheritance का मतलब एक class का एक साथ एक से ज़्यादा parents से inherit करना। कुछ languages इसे classes को allow करती हैं, पर Java नहीं — एक class सिर्फ़ एक class extend कर सकती है। हालाँकि, Java class को कई interfaces implement करने देती है, जो फ़ायदे सुरक्षित रूप से देता है।

💡 Java में classes का multiple inheritance नहीं — पर class कई interfaces implement कर सकती है।

Java इसे classes को क्यों रोकती है

class A { void show() { } }
class B { void show() { } }
// class C extends A, B { }   // ERROR: allowed नहीं

Java एक class को दो classes extend करने से रोकती है। कारण diamond problem है: अगर दोनों parents की show() method हो, child नहीं बता सकती कौन-सी inherit करे। इसे रोकना यह confusion हटा देता है।

Diamond problem

सोचिए ऊपर class A, classes B और C दोनों A extend करती, और एक class D दोनों B और C extend करने की कोशिश करती — diamond आकार बनाकर। अगर B और C वही method अलग बदलें, D के पास दो टकराते versions और कोई साफ़ नियम न होगा। यही अस्पष्टता है जिसके लिए Java इसे classes को मना करती है।

Interfaces इसे हल करते हैं

interface Swimmer { void swim(); }
interface Walker  { void walk(); }

class Duck implements Swimmer, Walker {
    public void swim() { System.out.println("swimming"); }
    public void walk() { System.out.println("walking"); }
}
swimming

एक class कई interfaces implement कर सकती है। चूँकि पारंपरिक interface methods की कोई body नहीं, कोई टकराव नहीं — class इकलौता implementation देती है। यह सुरक्षित रूप से type का multiple inheritance देता है।

Default methods

interface A { default void hi() { System.out.println("A"); } }
interface B { default void hi() { System.out.println("B"); } }

class C implements A, B {
    public void hi() {          // हल करने को override ज़रूरी
        A.super.hi();
    }
}

Java 8 से, interfaces में body वाली default methods हो सकती हैं। अगर दो interfaces एक साझा करें, class को override करना पड़ता है यह बताने को कौन-सी इस्तेमाल करे — तो यहाँ भी diamond problem नियंत्रित रहती है।

क्या इस्तेमाल करें

  • एक parent का code चाहिए? → class extend कीजिए (single inheritance)।
  • कई स्रोतों से capabilities चाहिए? → कई interfaces implement कीजिए।
  • Class बिना साझा व्यवहार? → interface default methods इस्तेमाल कीजिए।

यह मेल classic multiple inheritance के ख़तरे बिना लचीलापन देता है।

आम गलतियाँ

  • दो classes extend करने की कोशिश। Allowed नहीं — interfaces इस्तेमाल कीजिए।
  • Default method टकराव हल न करना। साझा method को class में override कीजिए।
  • "implements" को "extends" से मिलाना। Classes extend; interfaces implement होते हैं।
  • यह भूलना class interfaces पूरी implement करती है। सारी interface methods define होनी चाहिए।

सारांश

  • Java classes का multiple inheritance allow नहीं करती।
  • कारण diamond problem की अस्पष्टता है।
  • इसके बजाय एक class कई interfaces implement कर सकती है।
  • Interfaces टकराव बचाते हैं क्योंकि उनकी methods (पारंपरिक रूप से) की कोई body नहीं।
  • साझा default methods को, class टकराव हल करने को override करती है।

आगे, interfaces सीखिए abstraction और interfaces में, या single inheritance inheritance में।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

क्या Java multiple inheritance support करती है?
Java classes का multiple inheritance support नहीं करती — एक class दो classes extend नहीं कर सकती। पर यह interfaces के ज़रिए type का multiple inheritance support करती है: एक class एक साथ कई interfaces implement कर सकती है।
Java classes का multiple inheritance क्यों allow नहीं करती?
Diamond problem बचाने को: अगर एक class दो ऐसी classes extend करे जिन दोनों की एक ही नाम वाली method हो, Java तय नहीं कर सकती कौन-सी इस्तेमाल करे। इसे classes को रोकना यह अस्पष्टता हटा देता है।
Diamond problem क्या है?
Diamond problem तब होती है जब दो parent classes एक common ancestor साझा करें और दोनों वही method define करें। दोनों से inherit करती child के पास दो versions और कोई साफ़ चुनाव न होगा। Interfaces सिर्फ़ methods declare करके इसे बचाते हैं।
Interfaces multiple inheritance कैसे allow करते हैं?
एक class कई interfaces implement कर सकती है, उनके सारे method contracts पाकर। चूँकि पारंपरिक interface methods की कोई body नहीं होती, implementation पर कोई टकराव नहीं — class इकलौता implementation खुद देती है।
Interfaces में default methods क्या हैं?
Java 8 से, interfaces में body वाली default methods हो सकती हैं। अगर दो interfaces की एक ही default method हो, class को टकराव हल करने को उसे override करना पड़ता है, जो diamond problem नियंत्रित रखता है।
← Back to Java Tutorial
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.
अगला topicWrapper Classes & Autoboxing आपकी प्रगति: 34 / 61 (56%) · Lesson 35 / 61 आगे बढ़ें →

यह lesson कैसा लगा?

आपकी राय से हम content और बेहतर बनाते हैं।

अपना review और सुझाव लिखें (वैकल्पिक)

Review approve होने के बाद आपका नाम और शहर इसके साथ public दिख सकते हैं। Email या phone न लिखें।

▶ CodingEasily on YouTube

Video से सीखें – आसान Hindi में

चुनी हुई video: RDBMS भाग 3 – Class XI Commerce IT

▶ Channel subscribe करें