मुख्य सामग्री पर जाएं
मॉड्यूल 2 · पाठ 2 का 2पाठ्यक्रम में 4/14~12 min
मॉड्यूल पाठ (2/2)

तरीके और ओवरलोडिंग

विधियाँ किसी वस्तु के व्यवहार को परिभाषित करती हैं। हम उन्हें एक वर्ग के अंदर घोषित फ़ंक्शन के रूप में सोच सकते हैं जो ऑब्जेक्ट के इंस्टेंस फ़ील्ड या आने वाले पैरामीटर पर काम करते हैं।

एक विधि को परिभाषित करना

जावा में एक विधि में निम्न शामिल हैं:

  1. एक्सेस संशोधक (जैसे, public, private)।
  2. रिटर्न प्रकार (उदाहरण के लिए, int, String, या void यदि यह कुछ भी वापस नहीं करता है)।
  3. विधि का नाम camelCase में।
  4. पैरामीटर कोष्ठक में संलग्न।
  5. विधि शरीर घुंघराले ब्रेसिज़ में संलग्न।
Java
class Person {
    String name;

    public Person(String name) {
        this.name = name;
    }

    // Method with return type String
    public String greet() {
        return "Ciao, mi chiamo " + name;
    }
}

एक विधि को कॉल करना

किसी निर्मित ऑब्जेक्ट पर एक विधि लागू करने के लिए, हम डॉट नोटेशन . का उपयोग करते हैं:

Java
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);
    }
}

विधि अधिभार

जावा में, एक ही वर्ग के भीतर दो या दो से अधिक तरीकों का समान नाम हो सकता है, जब तक कि उनके पास अलग-अलग पैरामीटर सूची (संख्या, क्रम या पैरामीटर के प्रकार में) हो। इस अवधारणा को ओवरलोडिंग के रूप में जाना जाता है।

कॉल के दौरान पारित तर्कों का विश्लेषण करके कंपाइलर तय करता है कि किस विधि को लागू करना है।

Java
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);
    }
}

मान द्वारा पैरामीटर पासिंग

जावा में, सभी पैरामीटर वैल्यू द्वारा (पास-बाय-वैल्यू) पास किए जाते हैं। इसका मतलब यह है कि जब आप किसी विधि के लिए कोई तर्क पास करते हैं, तो जावा वेरिएबल के मान की एक प्रति बनाता है और उसे विधि में भेज देता है।

  • आदिम प्रकारों के लिए, विधि के बाहर का मूल मान कभी नहीं बदलता, भले ही विधि के अंदर संशोधित किया गया हो।
  • ऑब्जेक्ट/संदर्भ के लिए, ऑब्जेक्ट का संदर्भ कॉपी किया जाता है। इसका मतलब यह है कि यद्यपि हम उस मेमोरी एड्रेस को नहीं बदल सकते हैं जिस पर मूल ऑब्जेक्ट इंगित करता है, हम इसकी आंतरिक स्थिति (उदाहरण के लिए, इसके फ़ील्ड) को संशोधित कर सकते हैं और वे परिवर्तन बाहर दिखाई देंगे।

ओवरलोडिंग सीमाएँ: रिटर्न प्रकार

यह ध्यान रखना महत्वपूर्ण है कि आप केवल रिटर्न प्रकार के आधार पर किसी विधि को ओवरलोड नहीं कर सकते। उदाहरण के लिए, निम्न कोड संकलन त्रुटि का कारण बनेगा:

Java
class Example {
    // ERROR: The signature of the two methods is considered identical
    public int getNumber() { return 42; }
    public double getNumber() { return 42.0; }
}

कंपाइलर को केवल मापदंडों के आधार पर विधियों के बीच अंतर करने की आवश्यकता है ताकि यह तय किया जा सके कि कंपाइल-टाइम पर किस संस्करण को कॉल करना है (कंपाइल-टाइम पर ओवरलोडिंग का समाधान किया जाता है)।


खुद कोशिश करना

व्यायाम#java.m2.l2.e1
प्रयास: 0लोड हो रहा है...

कैलकुलेटर वर्ग में एक सार्वजनिक int add(int a, int b) विधि जोड़ें जो दो संख्याओं का योग लौटाती है। मुख्य विधि में, इस विधि को कैल्क ऑब्जेक्ट पर कॉल करें और परिणाम को एक पूर्णांक चर पर असाइन करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

विधि को `सार्वजनिक int add(int a, int b) { return a + b; के रूप में घोषित करें; }` और इसे मुख्य विधि में `int परिणाम = calc.add(5, 10);` के रूप में लागू करें।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#java.m2.l2.e2
प्रयास: 0लोड हो रहा है...

एक अन्य विधि बनाकर कैलकुलेटर क्लास में ऐड विधि को ओवरलोड करें जो दो दोहरे मापदंडों को स्वीकार करती है और उनका योग लौटाती है।

संपादक लोड हो रहा है...
संकेत दिखाएँ

`पब्लिक डबल ऐड (डबल ए, डबल बी) { रिटर्न ए + बी; लिखें; }` सीधे पहली ऐड विधि के नीचे।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#java.m2.l2.e3
प्रयास: 0लोड हो रहा है...

कैलकुलेटर वर्ग में एक सार्वजनिक इंट गुणा(इंट ए, इंट बी) विधि जोड़ें जो दो संख्याओं का उत्पाद लौटाती है। मुख्य विधि में, इस विधि को कैल्क ऑब्जेक्ट पर कॉल करें और परिणाम को एक पूर्णांक चर पर असाइन करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

विधि को `सार्वजनिक int गुणा (int a, int b) { return a * b; के रूप में घोषित करें; }` और इसे मुख्य विधि में `int परिणाम = calc.multiply(5, 10);` के रूप में लागू करें।

3 प्रयासों के बाद समाधान उपलब्ध है