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

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


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

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

  • आधार वर्ग में अंतिम विधि बनाकर
  • आधार वर्ग में एक विधि को स्थिर बनाकर
  • आधार वर्ग में एक विधि को निजी बनाकर

अंतिम विधियों को ओवरराइड नहीं किया जा सकता

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

उदाहरण

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");
   }
   // can not override test() method because its final in Base class
   /*
   *  public void test() { System.out.println("Derived class test() method"); }
   */
}
public class Test {
   public static void main(String[] args) {
      Base ref = new Derived();
   // Calling the final method test()
      ref.test();
   // Calling the overridden method show()
      ref.show();
   }
}

आउटपुट

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

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

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

उदाहरण

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");
   }
      // This is not an overridden method, this will be considered as new method in Derived class
   public static void test() {
      System.out.println("Derived class test() method");
   }
}
public class Test {
   public static void main(String[] args) {
      Base ref = new Derived();
      // It will call the Base class's test() because it had static binding
      ref.test();
      // Calling the overridden method show()
      ref.show();
   }
}

आउटपुट

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

निजी विधियों को ओवरराइड नहीं किया जा सकता

बेस क्लास के निजी तरीके व्युत्पन्न वर्ग में दिखाई नहीं देते हैं, इसलिए उन्हें ओवरराइड नहीं किया जा सकता है।

उदाहरण

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");
   }
   // This is not an overridden method, this will be considered as other method.
   public void test() {
      System.out.println("Derived class test() method");
   }
}
public class Test {
   public static void main(String[] args) {
      Base ref = new Derived();
   // Cannot call the private method test(), this line will give compile time error
   // ref.test();
   // Calling the overridden method show()
      ref.show();
   }
}

आउटपुट

Derived class show() method

  1. जावा विधियों का उपयोग कैसे करें

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

  1. जावा हैश मैप क्लास का उपयोग कैसे करें

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

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

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