Compile-time vs Runtime Polymorphism In Hindi
जावा प्रोग्रामिंग क्लास में पॉलीमॉर्फिज्म मेथड कांसेप्ट जावा प्रोग्रामर को डिफाइन क्लास ऑब्जेक्ट के आधार पर कई तरह के क्लास मेथड सुपरक्लास और सबक्लास डाटा टाइप पैरामीटर एलिमेंट को डील करने में हेल्प करते है, जिसमे वे मौजूदा क्लास में डिफाइन पैरामीटर ऑब्जेक्ट आर्गुमेंट को प्रोसेस कर रहे हैं। जावा में क्लास पॉलीमॉर्फिज्म कांसेप्ट ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP) के पॉपुलर कांसेप्ट में से एक है, और पॉलीमॉर्फिज्म फीचर्स जावा प्रोगामर को प्रोग्राम सोर्स कोड में फ्लेक्सिबिलिटी और रीयूज़ेबिलिटी क्रिएट या अचीव करने में हेल्प करते है।

The polymorphism concept in Java programming can be divided into two forms.
- पहला कम्पाइल-टाइम जावा क्लास पॉलीमॉर्फिज्म है. जिसे, स्टैटिक पॉलीमॉर्फिज्म के रूप में भी जाना जाता है.
- दूसरा रनटाइम जावा क्लास पॉलीमॉर्फिज्म है. जिसे, डायनामिक पॉलीमॉर्फिज्म के रूप में भी जाना जाता है.
So, let’s explore these two types of polymorphism concepts in Java classes in detail.
Compile-time Java class polymorphism/static polymorphism.
जावा क्लास प्रोग्राम में कम्पाइल-टाइम पॉलीमॉर्फिज्म टास्क तब एक्टिवेट होता है, जब जावा में डिफाइन क्लास में एग्जीक्यूट होने वाला क्लास मेथड कम्पाइलेशन फेज के दौरान आटोमेटिक रिज़ॉल्व हो जाता है। इस तरह के पॉलीमॉर्फिज्म कांसेप्ट सामान्य रूप से क्लास मेथड ओवरलोडिंग और ऑपरेटर ओवरलोडिंग के माध्यम से अचीव किया जाता है।
जावा क्लास प्रोग्रामिंग मेथड ओवरलोडिंग कम्पाइल-टाइम पॉलीमॉर्फिज्म का एक बेस्ट एक्साम्प्ल है। मेथड ओवरलोडिंग प्रोसेस में, यहाँ एक यूजर डिफाइन क्लास में एक ही नाम के कई क्लास मेथड डिफाइन हो सकते हैं, जबकि इन डिफाइन क्लास में डिक्लेअर वेरिएबल पैरामीटर नंबर्स या डाटा टाइप अलग अलग हो सकते हैं।
Features of Compile-time Java Class Polymorphism.
- जावा क्लास में मेथड ओवरलोडिंग कांसेप्ट, कम्पाइल-टाइम पॉलीमॉर्फिज्म बिहैवियर को अप्लाई करने का एक बेस्ट प्रोसेस है।
- डिक्लेअर या डिफाइन क्लास में कौन से मेथड को कॉल करना है, यह डिसीज़न प्रोग्राम कम्पाइल-टाइम मेथड सिग्नेचर के बेसेस पर लिया जाता है।
- यहाँ डिफाइन क्लास मेथड ओवरलोडिंग प्रोसेस में रिटर्न क्लास डाटा टाइप का कोई इम्पोर्टेन्ट रोल नहीं होता है।
Example of compile-time polymorphism/method overloading in Java.
class Calculation {
// here it Overloaded methods with different parameter types or number of parameters
public int total(int p, int q) {
return p + q;
}
public double total(double p, double q) {
return p + q;
}
public int total(int p, int q, int r) {
return p + q + r;
}
}
public class Main {
public static void main(String[] args) {
Calculation count = new Calculation();
System.out.println(count.total(7, 9)); // here it calling total(int, int) class method
System.out.println(count.total(3.9, 7.9)); // here it calling total(double, double) class method
System.out.println(count.total(9, 1, 8)); // here it calling total(int, int, int) data type method
}
}
Explaining compile-time polymorphism.
- यहाँ इस प्रोगाम में total क्लास मेथड अलग-अलग डिफाइन वेरिएबल क्लास पैरामीटर लिस्ट से आटोमेटिक ओवरलोड होता है।
- जहा क्लास में डिफाइन करेक्ट मेथड वर्जन पास किए गए पैरामीटर आर्गुमेंट्स नंबर्स और डाटा टाइप के आधार पर कॉल किया जाता है, और यह डिसीजन कंपाइलेशन फेज के दौरान लिया जाता है।
Runtime Java Class Polymorphism/Dynamic Polymorphism.
जावा क्लास प्रोगाम में रनटाइम पॉलीमॉर्फिज्म टास्क तब परफॉर्म होता है, जब एग्जीक्यूट होने वाला क्लास मेथड प्रोग्राम रनटाइम प्रोग्राम एग्जीक्यूशन फेज में रिज़ॉल्व किया जाता है, न कि प्रोग्राम कंपाइल-टाइम प्रोसेस फेज पर, यह एक्टिविटीज जावा क्लास मेथड में ओवरराइडिंग कांसेप्ट के कारण पॉसिबल होती है।
जावा मेथड ओवरराइडिंग में, एक सबक्लास अपने सुपरक्लास में पहले से डिक्लेअर किए गए क्लास मेथड का अपना इम्प्लीमेंटेशन प्रोवाइड करता है। जो मौजूदा क्लास मेथड में इनवोक होता है, तो इसमें रनटाइम पर एक्चुअल ऑब्जेक्ट डाटा टाइप (रेफरेंस टाइप नहीं) के आधार पर डिसाइड होता है।
Features of Runtime Java Class Polymorphism.
- जावा यूजर डिफाइन क्लास में मेथड ओवरराइडिंग रनटाइम पॉलीमॉर्फिज्म को अप्लाई करने का एक सबसे कॉमन प्रोसेस है।
- इस प्रोसेस में इसको कौन सा क्लास मेथड को कॉल करना है, यह डिसीजन क्लास रनटाइम पर एक्चुअल क्लास ऑब्जेक्ट डाटा टाइप के आधार पर लिया जाता है।
- जहा यूजर डिफाइन सबक्लास में मेथड सिग्नेचर सुपरक्लास के मेथड सिग्नेचर के जैसा या एक्जैक्ट मिलता जुलता ही होना चाहिए।
Example of runtime Java class polymorphism/method overriding.
class Course {
public void select_course() {
System.out.println(“Course, select_course”);
}
}
class Java extends Course {
@Override
public void select_course() {
System.out.println(“Java selected”);
}
}
class Python extends Course {
@Override
public void select_course() {
System.out.println(“Python selected”);
}
}
public class Main {
public static void main(String[] args) {
Course courrsefirst = new Java(); // Course reference, but Java object created
Course coursesecond = new Python(); // Course reference, but Python object created
courrsefirst.select_course(); // here it calling Java select_course() method
coursesecond.select_course(); // here it calling Python select_course() method
}
}
Runtime Java class polymorphism explanation.
- यहाँ इस प्रोग्राम में select_course() क्लास मेथड जावा और पाइथन दोनों क्लास में ओवरराइड होता है।
- इसमें रेफरेंस वेरिएबल courrsefirst कोर्स टाइप का है, लेकिन यह जावा ऑब्जेक्ट की ओर पॉइंट करता है, और रेफरेंस वेरिएबल coursesecond कोर्स टाइप का है, लेकिन यह पाइथन क्लास ऑब्जेक्ट को इंडीकेट करता है।
- कोर्स क्लास रनटाइम प्रोसेस में, जावा वर्चुअल मशीन (JVM) एक्चुअल क्लास ऑब्जेक्ट टाइप चाहे वह जावा हो या पाइथन को फिक्स करता है, और सही select_course() मेथड को क्लास में कॉल करता है।
