मॉड्यूल पाठ (2/2)
तरीके और ओवरलोडिंग
विधियाँ किसी वस्तु के व्यवहार को परिभाषित करती हैं। हम उन्हें एक वर्ग के अंदर घोषित फ़ंक्शन के रूप में सोच सकते हैं जो ऑब्जेक्ट के इंस्टेंस फ़ील्ड या आने वाले पैरामीटर पर काम करते हैं।
एक विधि को परिभाषित करना
जावा में एक विधि में निम्न शामिल हैं:
- एक्सेस संशोधक (जैसे,
public,private)। - रिटर्न प्रकार (उदाहरण के लिए,
int,String, याvoidयदि यह कुछ भी वापस नहीं करता है)। - विधि का नाम
camelCaseमें। - पैरामीटर कोष्ठक में संलग्न।
- विधि शरीर घुंघराले ब्रेसिज़ में संलग्न।
class Person {
String name;
public Person(String name) {
this.name = name;
}
// Method with return type String
public String greet() {
return "Ciao, mi chiamo " + name;
}
}एक विधि को कॉल करना
किसी निर्मित ऑब्जेक्ट पर एक विधि लागू करने के लिए, हम डॉट नोटेशन . का उपयोग करते हैं:
public class Main {
public static void main(String[] args) {
Person p = new Person("Marco");
String message = p.greet(); // Calling the method
System.out.println(message);
}
}विधि अधिभार
जावा में, एक ही वर्ग के भीतर दो या दो से अधिक तरीकों का समान नाम हो सकता है, जब तक कि उनके पास अलग-अलग पैरामीटर सूची (संख्या, क्रम या पैरामीटर के प्रकार में) हो। इस अवधारणा को ओवरलोडिंग के रूप में जाना जाता है।
कॉल के दौरान पारित तर्कों का विश्लेषण करके कंपाइलर तय करता है कि किस विधि को लागू करना है।
class Printer {
// Method to print an integer
public void printValue(int number) {
System.out.println("Intero: " + number);
}
// Overloaded method to print a string
public void printValue(String text) {
System.out.println("Testo: " + text);
}
}मान द्वारा पैरामीटर पासिंग
जावा में, सभी पैरामीटर वैल्यू द्वारा (पास-बाय-वैल्यू) पास किए जाते हैं। इसका मतलब यह है कि जब आप किसी विधि के लिए कोई तर्क पास करते हैं, तो जावा वेरिएबल के मान की एक प्रति बनाता है और उसे विधि में भेज देता है।
- आदिम प्रकारों के लिए, विधि के बाहर का मूल मान कभी नहीं बदलता, भले ही विधि के अंदर संशोधित किया गया हो।
- ऑब्जेक्ट/संदर्भ के लिए, ऑब्जेक्ट का संदर्भ कॉपी किया जाता है। इसका मतलब यह है कि यद्यपि हम उस मेमोरी एड्रेस को नहीं बदल सकते हैं जिस पर मूल ऑब्जेक्ट इंगित करता है, हम इसकी आंतरिक स्थिति (उदाहरण के लिए, इसके फ़ील्ड) को संशोधित कर सकते हैं और वे परिवर्तन बाहर दिखाई देंगे।
ओवरलोडिंग सीमाएँ: रिटर्न प्रकार
यह ध्यान रखना महत्वपूर्ण है कि आप केवल रिटर्न प्रकार के आधार पर किसी विधि को ओवरलोड नहीं कर सकते। उदाहरण के लिए, निम्न कोड संकलन त्रुटि का कारण बनेगा:
class Example {
// ERROR: The signature of the two methods is considered identical
public int getNumber() { return 42; }
public double getNumber() { return 42.0; }
}कंपाइलर को केवल मापदंडों के आधार पर विधियों के बीच अंतर करने की आवश्यकता है ताकि यह तय किया जा सके कि कंपाइल-टाइम पर किस संस्करण को कॉल करना है (कंपाइल-टाइम पर ओवरलोडिंग का समाधान किया जाता है)।
खुद कोशिश करना
कैलकुलेटर वर्ग में एक सार्वजनिक int add(int a, int b) विधि जोड़ें जो दो संख्याओं का योग लौटाती है। मुख्य विधि में, इस विधि को कैल्क ऑब्जेक्ट पर कॉल करें और परिणाम को एक पूर्णांक चर पर असाइन करें।
संकेत दिखाएँ
विधि को `सार्वजनिक int add(int a, int b) { return a + b; के रूप में घोषित करें; }` और इसे मुख्य विधि में `int परिणाम = calc.add(5, 10);` के रूप में लागू करें।
3 प्रयासों के बाद समाधान उपलब्ध है
एक अन्य विधि बनाकर कैलकुलेटर क्लास में ऐड विधि को ओवरलोड करें जो दो दोहरे मापदंडों को स्वीकार करती है और उनका योग लौटाती है।
संकेत दिखाएँ
`पब्लिक डबल ऐड (डबल ए, डबल बी) { रिटर्न ए + बी; लिखें; }` सीधे पहली ऐड विधि के नीचे।
3 प्रयासों के बाद समाधान उपलब्ध है
कैलकुलेटर वर्ग में एक सार्वजनिक इंट गुणा(इंट ए, इंट बी) विधि जोड़ें जो दो संख्याओं का उत्पाद लौटाती है। मुख्य विधि में, इस विधि को कैल्क ऑब्जेक्ट पर कॉल करें और परिणाम को एक पूर्णांक चर पर असाइन करें।
संकेत दिखाएँ
विधि को `सार्वजनिक int गुणा (int a, int b) { return a * b; के रूप में घोषित करें; }` और इसे मुख्य विधि में `int परिणाम = calc.multiply(5, 10);` के रूप में लागू करें।
3 प्रयासों के बाद समाधान उपलब्ध है