जावा बहुरूपता (उदाहरण के साथ)

इस ट्यूटोरियल में, हम जावा पॉलीमॉर्फिज़्म और इसके कार्यान्वयन के बारे में उदाहरणों की मदद से सीखेंगे।

बहुरूपता वस्तु-उन्मुख प्रोग्रामिंग की एक महत्वपूर्ण अवधारणा है। इसका सीधा मतलब है एक से अधिक फॉर्म।

यही है, एक ही इकाई (विधि या ऑपरेटर या वस्तु) अलग-अलग परिदृश्यों में अलग-अलग ऑपरेशन कर सकती है।

उदाहरण: जावा बहुरूपता

 class Polygon ( // method to render a shape public void render() ( System.out.println("Rendering Polygon… "); ) ) class Square extends Polygon ( // renders Square public void render() ( System.out.println("Rendering Square… "); ) ) class Circle extends Polygon ( // renders circle public void render() ( System.out.println("Rendering Circle… "); ) ) class Main ( public static void main(String() args) ( // create an object of Square Square s1 = new Square(); s1.render(); // create an object of Circle Circle c1 = new Circle(); c1.render(); ) )

आउटपुट

 रेंडरिंग स्क्वायर … सर्किल रेंडरिंग … 

उपरोक्त उदाहरण में, हमने एक सुपरक्लास बनाया है: बहुभुज और दो उपवर्ग: स्क्वायर और सर्कल। render()विधि के उपयोग पर ध्यान दें ।

render()विधि का मुख्य उद्देश्य आकृति को प्रस्तुत करना है। हालांकि, एक वर्ग के प्रतिपादन की प्रक्रिया एक सर्कल के प्रतिपादन की प्रक्रिया से अलग है।

इसलिए, render()विधि अलग-अलग वर्गों में अलग-अलग व्यवहार करती है। या, हम कह सकते हैं render()कि बहुरूपी है।

बहुरूपता क्यों?

बहुरूपता हमें सुसंगत कोड बनाने की अनुमति देता है। पिछले उदाहरण में, हम अलग-अलग तरीके भी बना सकते हैं: renderSquare()और renderCircle()क्रमशः स्क्वायर और सर्कल को रेंडर करने के लिए।

यह पूरी तरह से काम करेगा। हालांकि, हर आकृति के लिए, हमें अलग-अलग तरीके बनाने की जरूरत है। यह हमारे कोड को असंगत बना देगा।

इसे हल करने के लिए, जावा में बहुरूपता हमें एक एकल विधि बनाने की अनुमति देता है render()जो विभिन्न आकृतियों के लिए अलग-अलग व्यवहार करेगा।

नोट : print()विधि भी बहुरूपता का एक उदाहरण है। यह विभिन्न प्रकार की तरह के मूल्यों को मुद्रित करने के लिए प्रयोग किया जाता है char, int, string, आदि

हम निम्नलिखित तरीकों का उपयोग करके जावा में बहुरूपता प्राप्त कर सकते हैं:

  1. तरीका ओवरराइडिंग
  2. विधि ओवरलोडिंग
  3. ऑपरेटर ओवरलोडिंग

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

जावा में विरासत के दौरान, यदि एक ही विधि सुपरक्लास और उपवर्ग दोनों में मौजूद है। फिर, उपवर्ग में विधि सुपरक्लास में उसी विधि को ओवरराइड करती है। इसे मेथड ओवरराइडिंग कहा जाता है।

इस स्थिति में, एक ही विधि सुपरक्लास में एक ऑपरेशन और उप-क्लास में एक और ऑपरेशन करेगी। उदाहरण के लिए,

उदाहरण 1: विधि के ओवरराइडिंग का उपयोग करके बहुरूपता

 class Language ( public void displayInfo() ( System.out.println("Common English Language"); ) ) class Java extends Language ( @Override public void displayInfo() ( System.out.println("Java Programming Language"); ) ) class Main ( public static void main(String() args) ( // create an object of Java class Java j1 = new Java(); j1.displayInfo(); // create an object of Language class Language l1 = new Language(); l1.displayInfo(); ) )

आउटपुट :

 जावा प्रोग्रामिंग लैंग्वेज कॉमन इंग्लिश लैंग्वेज

उपरोक्त उदाहरण में, हमने भाषा नामक एक सुपरक्लास और जावा नामक एक उपवर्ग बनाया है। यहां, displayInfo()भाषा और जावा दोनों में विधि मौजूद है।

का उपयोग displayInfo()सूचना को प्रिंट करना है। हालाँकि, यह भाषा और जावा में अलग-अलग जानकारी मुद्रित कर रहा है।

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

जावा बहुरूपता का कार्य

नोट : विधि कहा जाता है कि कार्यक्रम के निष्पादन के दौरान निर्धारित किया जाता है। इसलिए, विधि ओवरराइडिंग एक रन-टाइम बहुरूपता है

2. जावा मेथड ओवरलोडिंग

एक जावा वर्ग में, हम एक ही नाम के साथ तरीके बना सकते हैं यदि वे मापदंडों में भिन्न हैं। उदाहरण के लिए,

 void func() (… ) void func(int a) (… ) float func(double a) (… ) float func(int a, float b) (… )

यह जावा में विधि अधिभार के रूप में जाना जाता है। यहां, एक ही विधि पैरामीटर के आधार पर विभिन्न संचालन करेगी।

उदाहरण 3: विधि अधिभार का उपयोग कर बहुरूपता

 class Pattern ( // method without parameter public void display() ( for (int i = 0; i < 10; i++) ( System.out.print("*"); ) ) // method with single parameter public void display(char symbol) ( for (int i = 0; i < 10; i++) ( System.out.print(symbol); ) ) ) class Main ( public static void main(String() args) ( Pattern d1 = new Pattern(); // call method without any argument d1.display(); System.out.println(""); // call method with a single argument d1.display('#'); ) )

आउटपुट :

 ********** ##########

उपरोक्त उदाहरण में, हमने पैटर्न नामक एक वर्ग बनाया है। कक्षा में एक विधि होती है जिसका नाम display()अतिभार होता है।

 // method with no arguments display() (… ) // method with a single char type argument display(char symbol) (… )

यहां, मुख्य कार्य display()पैटर्न को प्रिंट करना है। हालांकि, पारित तर्कों के आधार पर, विधि अलग-अलग ऑपरेशन कर रही है:

  • का एक पैटर्न प्रिंट करता है *, अगर कोई तर्क पारित नहीं होता है या
  • यदि कोई एकल charप्रकार का तर्क दिया जाता है , तो पैरामीटर का प्रिंट ।

नोट : जिस विधि को कहा जाता है वह कंपाइलर द्वारा निर्धारित किया जाता है। इसलिए, इसे संकलन-समय के बहुरूपता के रूप में भी जाना जाता है।

3. जावा ऑपरेटर ओवरलोडिंग

जावा में कुछ ऑपरेटर अलग-अलग ऑपरेंड के साथ अलग व्यवहार करते हैं। उदाहरण के लिए,

  • + operator is overloaded to perform numeric addition as well as string concatenation, and
  • operators like &, |, and ! are overloaded for logical and bitwise operations.

Let's see how we can achieve polymorphism using operator overloading.

The + operator is used to add two entities. However, in Java, the + operator performs two operations.

1. When + is used with numbers (integers and floating-point numbers), it performs mathematical addition. For example,

 int a = 5; int b = 6; // + with numbers int sum = a + b; // Output = 11

2. When we use the + operator with strings, it will perform string concatenation (join two strings). For example,

 String first = "Java "; String second = "Programming"; // + with strings name = first + second; // Output = Java Programming

Here, we can see that the + operator is overloaded in Java to perform two operations: addition and concatenation.

Note: In languages like C++, we can define operators to work differently for different operands. However, Java doesn't support user-defined operator overloading.

Polymorphic Variables

A variable is called polymorphic if it refers to different values under different conditions.

Object variables (instance variables) represent the behavior of polymorphic variables in Java. It is because object variables of a class can refer to objects of its class as well as objects of its subclasses.

Example: Polymorphic Variables

 class ProgrammingLanguage ( public void display() ( System.out.println("I am Programming Language."); ) ) class Java extends ProgrammingLanguage ( @Override public void display() ( System.out.println("I am Object-Oriented Programming Language."); ) ) class Main ( public static void main(String() args) ( // declare an object variable ProgrammingLanguage pl; // create object of ProgrammingLanguage pl = new ProgrammingLanguage(); pl.display(); // create object of Java class pl = new Java(); pl.display(); ) )

Output:

 I am Programming Language. I am Object-Oriented Programming Language.

उपरोक्त उदाहरण में, हमने ProgrammingLanguage वर्ग का एक ऑब्जेक्ट चर pl बनाया है। यहाँ, pl एक बहुरूपी चर है। यह है क्योंकि,

  • बयान में pl = new ProgrammingLanguage(), pl ProgrammingLanguage वर्ग की वस्तु को संदर्भित करता है।
  • और, कथन में pl = new Java(), जावा वर्ग की वस्तु को देखें।

यह जावा में अपकास्टिंग का एक उदाहरण है।

दिलचस्प लेख...