जावा में, दोनों निकट से संबंधित हैं। ऐसा इसलिए है क्योंकि जावा "डायनेमिक प्रेषण" नामक विधि आह्वान के लिए एक तकनीक का उपयोग करता है। अगर मेरे पास
public class A {
public void draw() { ... }
public void spin() { ... }
}
public class B extends A {
public void draw() { ... }
public void bad() { ... }
}
...
A testObject = new B();
testObject.draw(); // calls B's draw, polymorphic
testObject.spin(); // calls A's spin, inherited by B
testObject.bad(); // compiler error, you are manipulating this as an A
तब हम देखते हैं कि बी spin
ए से विरासत में मिला है। हालांकि, जब हम ऑब्जेक्ट को हेरफेर करने की कोशिश करते हैं जैसे कि यह एक ए था, तब भी हमें बी के व्यवहार के लिए मिलता है draw
। draw
व्यवहार बहुरूपी है।
कुछ भाषाओं में, बहुरूपता और वंशानुक्रम काफी निकटता से संबंधित नहीं हैं। C ++ में, उदाहरण के लिए, घोषित किए गए फ़ंक्शंस वर्चुअल इनहेरिट नहीं किए गए हैं, लेकिन गतिशील रूप से नहीं भेजे जाएंगे, इसलिए जब आप इनहेरिटेंस का उपयोग करते हैं, तब भी आपको वह पॉलीमॉर्फिक व्यवहार नहीं मिलेगा।
जावास्क्रिप्ट में, प्रत्येक फ़ंक्शन कॉल गतिशील रूप से भेजा जाता है और आपके पास कमजोर टाइपिंग है। इसका मतलब है कि आपके पास असंबंधित वस्तुओं का एक गुच्छा हो सकता है, प्रत्येक अपने स्वयं के साथ draw
, उन पर एक फ़ंक्शन पुनरावृति हो सकता है और फ़ंक्शन को कॉल कर सकता है, और प्रत्येक ठीक व्यवहार करेगा। आपको विरासत की आवश्यकता के बिना अपना स्वयं का बहुरूपिक ड्रॉ करना होगा।