1. व्हेल और गाय

यहाँ एक दिलचस्प प्राणी तथ्य है: एक गाय एक व्हेल के बहुत करीब है, उदाहरण के लिए, एक दरियाई घोड़े के लिए। यह पता चला है कि गाय और व्हेल अपेक्षाकृत करीबी रिश्तेदार हैं।

यहाँ देखो। आइए आपको बहुरूपता के बारे में बताते हैं — OOP का एक और बहुत शक्तिशाली उपकरण । इसकी चार विशेषताएं हैं।


2. वंशानुक्रम रामबाण नहीं है

कल्पना कीजिए कि आपने Cowएक खेल के लिए एक कक्षा लिखी है। इसके कई क्षेत्र और विधियाँ हैं। इस वर्ग की वस्तुएँ विभिन्न कार्य कर सकती हैं: चलना, खाना और सोना। गाय एक घंटी भी पहनती हैं जो चलने पर बजती है। मान लीजिए कि आपने कक्षा में सब कुछ सबसे छोटे विस्तार से लागू कर दिया है।

और फिर आपकी मुवक्किल आती है और कहती है कि वह एक नया खेल स्तर जारी करना चाहती है, जिसमें सारी कार्रवाई समुद्र में होती है, और मुख्य पात्र एक व्हेल है।

आप एक क्लास डिजाइन करना शुरू करते हैं और महसूस करते हैं कि यह क्लास Whaleसे थोड़ा ही अलग है । Cowदोनों वर्गों का तर्क बहुत समान है और आप वंशानुक्रम का उपयोग करने का निर्णय लेते हैं।

जावा में बहुरूपता

वर्ग Cowमूल वर्ग की भूमिका निभाने के लिए आदर्श है: इसमें सभी आवश्यक चर और विधियाँ हैं। हमें बस इतना करना है कि व्हेल को तैरने की क्षमता दें। लेकिन एक समस्या है: आपकी व्हेल के पैर, सींग और एक घंटी है। आखिरकार, यह कार्यक्षमता Cowकक्षा के अंदर लागू की जाती है। यहाँ क्या किया जा सकता है?

जावा में बहुरूपता।  विरासत

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

ओवरराइडिंग विधि हमारे बचाव में आती है। यदि हमें एक ऐसी विधि विरासत में मिली है जो हमारी नई कक्षा में वह नहीं करती है जो हम चाहते हैं, तो हम उस विधि को दूसरे के साथ बदल सकते हैं।

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

यह कैसे किया जाता है? हमारे वंशज वर्ग में, हम उसी विधि को मूल वर्ग की विधि के रूप में घोषित करते हैं जिसे हम ओवरराइड करना चाहते हैं। हम इसमें अपना नया कोड लिखते हैं। और बस हो गया — ऐसा लगता है जैसे पैरेंट क्लास में पुरानी पद्धति मौजूद ही नहीं है।

इस तरह से ये कार्य करता है:

कोड विवरण
class Cow
{
   public void printColor ()
   {
      System.out.println("I'm a white whale");
   }

   public void printName()
   {
      System.out.println("I'm a cow");
   }
}

class Whale extends Cow
{
   public void printName()
   {
      System.out.println("I'm a whale");
   }
}
  • यहाँ दो वर्गों को परिभाषित किया गया है - CowऔरWhale
  • WhaleinheritsCow
  • वर्ग विधि को Whaleओवरराइड करता हैprintName()
public static void main(String[] args)
{
   Cow cow = new Cow();
   cow.printName();
}
यह कोड स्क्रीन पर निम्न पाठ प्रदर्शित करता है:
I'm a cow
public static void main(String[] args)
{
   Whale whale = new Whale();
   whale.printName();
}
यह कोड स्क्रीन पर निम्न प्रदर्शित करता है:
I'm a whale

Cowवर्ग को इनहेरिट करने और विधि को ओवरराइड करने के बाद printName, Whaleकक्षा में वास्तव में निम्नलिखित डेटा और विधियाँ होती हैं:

class Whale
{
   public void printColor()
   {
      System.out.println("I'm a white whale");
   }

   public void printName()
   {
      System.out.println("I'm a whale");
   }
}
हम किसी पुराने तरीके के बारे में नहीं जानते।