Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

Java में मेथड ओवरराइडिंग को रोकने के कितने तरीके हैं?


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

हम Java में मेथड ओवरराइडिंग को 3 तरीकों से रोक सकते हैं:

  • बेस क्लास में मेथड को final बनाकर
  • बेस क्लास में मेथड को static बनाकर
  • बेस क्लास में मेथड को private बनाकर

Final मेथड्स को ओवरराइड नहीं किया जा सकता

किसी मेथड को final बनाकर हम एक प्रतिबंध जोड़ रहे हैं कि डेराइव्ड क्लास इस विशेष मेथड को ओवरराइड नहीं कर सकती।

उदाहरण

class Base {
    public void show() {
        System.out.println("Base class show() method");
    }
    public final void test() {
        System.out.println("Base class test() method");
    }
}
class Derived extends Base {
    public void show() {
        System.out.println("Derived class show() method");
    }
    // test() मेथड को ओवरराइड नहीं कर सकते क्योंकि यह Base क्लास में final है
    /*
    public void test() {
        System.out.println("Derived class test() method");
    }
    */
}
public class Test {
    public static void main(String[] args) {
        Base ref = new Derived();
        // Final मेथड test() को कॉल करना
        ref.test();
        // ओवरराइडेड मेथड show() को कॉल करना
        ref.show();
    }
}

आउटपुट

Base class test() method
Derived class show() method

Static मेथड्स को ओवरराइड नहीं किया जा सकता

हम डेराइव्ड क्लास में static मेथड्स को ओवरराइड नहीं कर सकते क्योंकि static मेथड्स क्लास से जुड़े होते हैं, ऑब्जेक्ट से नहीं। इसका मतलब है कि जब हम static मेथड को कॉल करते हैं तो JVM इसे this रेफरेंस पास नहीं करता जैसा कि यह सभी नॉन-स्टैटिक मेथड्स के लिए करता है। इसलिए static मेथड्स के लिए रन-टाइम बाइंडिंग नहीं हो सकती।

उदाहरण

class Base {
    public void show() {
        System.out.println("Base class show() method");
    }
    public static void test() {
        System.out.println("Base class test() method");
    }
}
class Derived extends Base {
    public void show() {
        System.out.println("Derived class show() method");
    }
    // यह ओवरराइडेड मेथड नहीं है, इसे Derived क्लास में नया मेथड माना जाएगा
    public static void test() {
        System.out.println("Derived class test() method");
    }
}
public class Test {
    public static void main(String[] args) {
        Base ref = new Derived();
        // यह Base क्लास के test() को कॉल करेगा क्योंकि इसमें स्टैटिक बाइंडिंग थी
        ref.test();
        // ओवरराइडेड मेथड show() को कॉल करना
        ref.show();
    }
}

आउटपुट

Base class test() method
Derived class show() method

Private मेथड्स को ओवरराइड नहीं किया जा सकता

बेस क्लास के प्राइवेट मेथड्स डेराइव्ड क्लास में विजिबल नहीं होते, इसलिए उन्हें ओवरराइड नहीं किया जा सकता।

उदाहरण

class Base {
    public void show() {
        System.out.println("Base class show() method");
    }
    private void test() {
        System.out.println("Base class test() method");
    }
}
class Derived extends Base {
    public void show() {
        System.out.println("Derived class show() method");
    }
    // यह ओवरराइडेड मेथड नहीं है, इसे अन्य मेथड माना जाएगा।
    public void test() {
        System.out.println("Derived class test() method");
    }
}
public class Test {
    public static void main(String[] args) {
        Base ref = new Derived();
        // प्राइवेट मेथड test() को कॉल नहीं कर सकते, यह लाइन कंपाइल टाइम एरर देगी
        // ref.test();
        // ओवरराइडेड मेथड show() को कॉल करना
        ref.show();
    }
}

आउटपुट

Derived class show() method

  1. - Java Methods का उपयोग कैसे करें

    Java Method Introduction ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में, मेथड्स कोड के ब्लॉक होते हैं जो एक विशिष्ट कार्य करते हैं। उदाहरण के लिए, एक मेथड जांच सकता है कि क्या ग्राहक के बैंक खाते में खरीदारी करने के लिए पर्याप्त पैसा है या छात्र नामों की सूची की सामग्री को वर्णमाला क्रम में सॉर्ट कर सकता है। यह

  1. - Java HashMap Class का उपयोग कैसे करें

    Java Maps और HashMap प्रोग्रामिंग में, डेटा टाइप्स का उपयोग डेटा के विशेष प्रकारों को वर्गीकृत करने के लिए किया जाता है। प्रत्येक डेटा टाइप को अलग तरीके से स्टोर किया जाता है, और वह डेटा टाइप जिसमें मान स्टोर किया जाता है, यह निर्धारित करेगा कि मान पर कौन से ऑपरेशन किए जा सकते हैं। जब आप Java में का

  1. जावा में डिफ़ॉल्ट मेथड्स का उपयोग करके डायमंड समस्या कैसे हल करें जावा में डिफ़ॉल्ट मेथड्स का उपयोग करके डायमंड समस्या कैसे हल करें

    इनहेरिटेंस दो क्लासेस के बीच एक संबंध है जहां एक क्लास दूसरी क्लास के गुणों को इनहेरिट करती है। इस संबंध को extends कीवर्ड का उपयोग करके परिभाषित किया जा सकता है -public class A extends B{}जो क्लास गुणों को इनहेरिट करती है उसे सब क्लास या चाइल्ड क्लास के रूप में जाना जाता है और जिस क्लास के गुणों को