Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

जावा में डिफ़ॉल्ट मेथड्स का उपयोग करके डायमंड समस्या कैसे हल करें


इनहेरिटेंस दो क्लासेस के बीच एक संबंध है जहां एक क्लास दूसरी क्लास के गुणों को इनहेरिट करती है। इस संबंध को extends कीवर्ड का उपयोग करके परिभाषित किया जा सकता है -

public class A extends B{

}

जो क्लास गुणों को इनहेरिट करती है उसे सब क्लास या चाइल्ड क्लास के रूप में जाना जाता है और जिस क्लास के गुणों को इनहेरिट किया जाता है उसे सुपर क्लास या पैरेंट क्लास के रूप में जाना जाता है।

इनहेरिटेंस में सुपर क्लास के मेंबर्स की एक कॉपी सब क्लास ऑब्जेक्ट में बनाई जाती है। इसलिए, सब क्लास ऑब्जेक्ट का उपयोग करके आप दोनों क्लासेस के मेंबर्स को एक्सेस कर सकते हैं।

मल्टीपल इनहेरिटेंस वह है जहां एक क्लास कई क्लासेस के गुणों को इनहेरिट करती है। दूसरे शब्दों में, मल्टीपल इनहेरिटेंस में हम एक चाइल्ड क्लास और n संख्या में पैरेंट क्लास रख सकते हैं। जावा मल्टीपल इनहेरिटेंस (क्लासेस के साथ) का समर्थन नहीं करता।

डायमंड समस्या

  • उदाहरण के लिए, मान लें कि जावा मल्टीपल इनहेरिटेंस का समर्थन करता है।
  • और यदि हमारे पास Sample नामक एक एब्स्ट्रैक्ट क्लास है जिसमें एब्स्ट्रैक्ट मेथड demo() है।
  • फिर यदि उसी पैकेज में दो अन्य क्लासेस इस क्लास को एक्सटेंड करती हैं और इसके एब्स्ट्रैक्ट मेथड, demo() को इम्प्लीमेंट करने की कोशिश करती हैं।
  • तब, इनहेरिटेंस के बुनियादी नियम के अनुसार, दोनों demo() मेथड्स की एक कॉपी सबक्लास ऑब्जेक्ट में बनाई जानी चाहिए जो सबक्लास को समान प्रोटोटाइप (नाम और आर्गुमेंट्स) वाले दो मेथड्स के साथ छोड़ देती है।
  • फिर, यदि आप सबक्लास के ऑब्जेक्ट का उपयोग करके demo() मेथड को कॉल करते हैं तो कंपाइलर एक अस्पष्ट स्थिति का सामना करता है यह नहीं जानता कि किस मेथड को कॉल करना है। इस मुद्दे को जावा में डायमंड समस्या के रूप में जाना जाता है।जावा में डिफ़ॉल्ट मेथड्स का उपयोग करके डायमंड समस्या कैसे हल करें

डायमंड समस्या का समाधान

आप जावा में मल्टीपल इनहेरिटेंस प्राप्त कर सकते हैं, डिफ़ॉल्ट मेथड्स (Java8) और इंटरफेसेस का उपयोग करके।

Java8 से डिफ़ॉल्ट मेथड्स इंटरफेस में पेश किए गए हैं। अन्य एब्स्ट्रैक्ट मेथड्स के विपरीत ये इंटरफेस के मेथड्स हैं जिनका डिफ़ॉल्ट कार्यान्वयन होता है। यदि आपके पास इंटरफेस में डिफ़ॉल्ट मेथड है, तो इस इंटरफेस को इम्प्लीमेंट करने वाली क्लासेस में इसे ओवरराइड (बॉडी प्रदान करना) करना अनिवार्य नहीं है।

आप दो अलग-अलग इंटरफेसेस में समान डिफ़ॉल्ट मेथड्स (समान नाम और सिग्नेचर) रख सकते हैं और, एक क्लास से आप इन दो इंटरफेसेस को इम्प्लीमेंट कर सकते हैं।

यदि आप ऐसा करते हैं, तो आपको क्लास से डिफ़ॉल्ट मेथड को इसके इंटरफेस नाम के साथ स्पष्ट रूप से निर्दिष्ट करके ओवरराइड करना होगा।

उदाहरण

interface MyInterface1{      public static int num = 100;    public default void display() {       System.out.println("display method of MyInterface1");    } } interface MyInterface2{      public static int num = 1000;    public default void display() {       System.out.println("display method of MyInterface2");    } }   public class InterfaceExample implements MyInterface1, MyInterface2{    public void display() {       MyInterface1.super.display();       //or,       MyInterface2.super.display();    }          public static void main(String args[]) {       InterfaceExample obj = new InterfaceExample();       obj.display();    } }

आउटपुट

display method of MyInterface1 display method of MyInterface2

  1. जावा में डिफ़ॉल्ट मेथड्स का उपयोग करके डायमंड समस्या कैसे हल करें? जावा में डिफ़ॉल्ट मेथड्स का उपयोग करके डायमंड समस्या कैसे हल करें?

    इनहेरिटेंस दो क्लासेस के बीच एक संबंध है जहां एक क्लास दूसरी क्लास के गुणों को इनहेरिट करती है। इस संबंध को extends कीवर्ड का उपयोग करके परिभाषित किया जा सकता है -public class A extends B{ }जो क्लास गुणों को इनहेरिट करती है उसे सब क्लास या चाइल्ड क्लास के रूप में जाना जाता है और जिस क्लास के गुणों क

  1. - जावा में डिफ़ॉल्ट मेथड्स का उपयोग क्या है?

    जावा में एक इंटरफेस क्लास के समान है लेकिन, इसमें केवल एब्स्ट्रैक्ट मेथड्स और फील्ड्स होते हैं जो फाइनल और स्टैटिक हैं।यह मेथड प्रोटोटाइप्स का एक विनिर्देश है। जब भी आपको प्रोग्रामर को मार्गदर्शन करने या, एक अनुबंध निर्दिष्ट करने की आवश्यकता होती है कि किसी प्रकार के मेथड्स और फील्ड्स कैसे होने चाहि

  1. जावा में डिफ़ॉल्ट मेथड्स का उपयोग करके डायमंड समस्या कैसे हल करें जावा में डिफ़ॉल्ट मेथड्स का उपयोग करके डायमंड समस्या कैसे हल करें

    इनहेरिटेंस दो क्लासेस के बीच एक संबंध है जहां एक क्लास दूसरी क्लास के गुणों को इनहेरिट करती है। इस संबंध को extends कीवर्ड का उपयोग करके परिभाषित किया जा सकता है -public class A extends B{}जो क्लास गुणों को इनहेरिट करती है उसे सब क्लास या चाइल्ड क्लास के रूप में जाना जाता है और जिस क्लास के गुणों को