खोज…


परिचय

बहुरूपता OOP (ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग) में मूल अवधारणाओं में से एक है। बहुरूपता का मुख्य विचार यह है कि एक वस्तु में विभिन्न रूपों को लेने की क्षमता होती है। उस (बहुरूपता) को प्राप्त करने के लिए, हमारे पास दो मुख्य दृष्टिकोण हैं।

  1. विधि अधिभार

    • तब होता है जब अलग-अलग इनपुट मापदंडों के साथ एक ही नाम के दो या अधिक तरीके होते हैं। रिटर्न प्रकार सभी विधियों के लिए समान नाम के साथ समान होना चाहिए
  2. ओवरराइड करने की विधि

    • तब होता है जब बच्चा ऑब्जेक्ट समान विधि परिभाषा (समान मापदंडों के साथ एक ही नाम) का उपयोग करता है, लेकिन अलग-अलग कार्यान्वयन होते हैं।

इन दो दृष्टिकोणों का उपयोग करके हम अलग-अलग व्यवहार करने के लिए एक ही विधि / फ़ंक्शन का उपयोग कर सकते हैं। आइए निम्नलिखित उदाहरणों में इस पर अधिक विवरण देखें।

विधि अतिभार

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

इनपुट पैरामीटर का अंतर या तो हो सकता है:

  • मापदंडों की संख्या
  • मापदंडों का प्रकार (डेटा प्रकार)
  • मापदंडों का क्रम

आइए उन पर अलग से नज़र डालें (जावा में ये उदाहरण, जैसा कि मैं इससे अधिक परिचित हूं - इसके बारे में क्षमा करें):

  1. पैरामीटर की संख्या

     public class Mathematics { 
         public int add (int a, int b) {
             return (a + b);
         }
    
         public int add (int a, int b, int c) {
             return (a + b + c); 
         }
    
         public int add (int a, int b, int c, int c) {
             return (a + b + c + d);
         }
     }
    

    ध्यान से देखें, तो आप देख सकते हैं कि विधि का रिटर्न प्रकार एक ही है - int , लेकिन इन विधियों में अलग-अलग संख्या में इनपुट हैं। इसे विभिन्न मापदंडों के साथ लोड करने की विधि कहा जाता है।

    पुनश्च: यह सिर्फ एक उदाहरण है , इस तरह के कार्यों को परिभाषित करने की कोई आवश्यकता नहीं है।

  1. मापदंडों का प्रकार

    public class Mathematics { 
        public void display (int a) {
            System.out.println("" + a);
        }
    
        public void display (double a) {
            System.out.println("" + a);
        }
    
        public void display (float a) {
            System.out.println("" + a);
        }
    }
    

    ध्यान दें कि हर विधि का एक ही नाम और समान रिटर्न प्रकार होता है, जबकि उनके पास अलग-अलग इनपुट डेटा प्रकार होते हैं।

    पुनश्च: यह उदाहरण केवल उद्देश्य की व्याख्या के लिए है।

  1. मापदंडों का क्रम

    public class Mathematics {
        public void display (int a, double b) {
            System.out.println("Numbers are " + a + " and " + b);
        }
    
        public void display (double a, int b) {
            System.out.println("Numbers are " + a + " and " + b);
        }
    }
    

    पुनश्च: यह उदाहरण केवल उद्देश्य की व्याख्या करने के लिए है।

विधि ओवरराइडिंग

विधि अधिभावी वर्गों के बीच बहुरूपता का उपयोग करने का तरीका है। यदि एक वर्ग दूसरे से विरासत में मिला है, तो पूर्व (उप वर्ग) बाद की (सुपर क्लास) विधियों को ओवरराइड कर सकता है, और कार्यान्वयन को बदल सकता है।

यह प्रयोग किया जाता है जहां सुपर क्लास विधि के अधिक सामान्य कार्यान्वयन को परिभाषित करता है जबकि उप वर्ग एक अधिक विशिष्ट का उपयोग करता है।

निम्नलिखित उदाहरण पर विचार करें:

हम स्तनधारियों के लिए एक वर्ग है:

class Mammal {
  void whoIam () {
    System.out.println("I am a Mammal");
  }
}

फिर हमारे पास डॉग के लिए एक क्लास है, जो एक स्तनधारी है:

class Dog extends Mammal {
  @Override
  void whoIam () {
    super.whoIam();
    System.out.println("I am a Dog!");
  }
}

इस उदाहरण में, हम Mammal वर्ग में whoIam() पद्धति को परिभाषित करते हैं, जहां स्तनपायी कहते हैं कि यह स्तनपायी है। लेकिन यह एक सामान्य शब्द है, क्योंकि वहाँ बहुत सारे स्तनधारी हैं। तब हम Dog क्लास को Mammal वर्ग से प्राप्त कर सकते हैं, क्योंकि डॉग एक स्तनपायी है। लेकिन, अधिक विशिष्ट होने के लिए, डॉग एक कुत्ते के साथ-साथ एक स्तनधारी भी है। इसलिए, डॉग को कहना चाहिए, I am a Mammal I am a Dog और I am a Dog भी I am a Dog । इसलिए हम सुपर क्लास ( Mammal वर्ग, जो है) में उप-वर्ग ( Dog क्लास) से whoIam() पद्धति को ओवरराइड कर सकते हैं।

हम Java में super.whoIam() का उपयोग करके सुपर क्लास की विधि भी कह सकते हैं। फिर, Dog एक कुत्ते की तरह व्यवहार करेगा, जबकि एक स्तनपायी की तरह भी व्यवहार करेगा।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow