ओवरराइडिंग बनाम हिडिंग जावा - कन्फ्यूज्ड


88

मैं इस बात पर असमंजस में हूँ कि ओवरराइडिंग जावा में छिपने से कैसे अलग है। क्या कोई इस बारे में अधिक जानकारी प्रदान कर सकता है कि ये कैसे भिन्न हैं? मैंने जावा ट्यूटोरियल पढ़ा लेकिन नमूना कोड अभी भी मुझे भ्रमित करता है।

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

जावा ट्यूटोरियल कोड को देखते हुए:

public class Animal {
    public static void testClassMethod() {
        System.out.println("Class" + " method in Animal.");
    }
    public void testInstanceMethod() {
        System.out.println("Instance " + " method in Animal.");
    }
}

फिर हमारे पास एक उपवर्ग है Cat:

public class Cat extends Animal {
    public static void testClassMethod() {
        System.out.println("The class method" + " in Cat.");
    }
    public void testInstanceMethod() {
        System.out.println("The instance method" + " in Cat.");
    }

    public static void main(String[] args) {
        Cat myCat = new Cat();
        Animal myAnimal = myCat;
        Animal.testClassMethod();
        myAnimal.testInstanceMethod();
    }
}

फिर वे कहते हैं:

इस कार्यक्रम से आउटपुट निम्नानुसार है:

पशु में कक्षा विधि।

कैट में उदाहरण विधि।

मेरे लिए, यह तथ्य कि क्लास testClassMethod()से सीधे क्लास पद्धति को कॉल करना क्लास में विधि को Animalनिष्पादित करता Animalहै, बहुत स्पष्ट है, वहां कुछ खास नहीं है। फिर वे testInstanceMethod()एक संदर्भ से कॉल करते हैं myCat, इसलिए फिर से स्पष्ट है कि निष्पादित विधि फिर उसी के उदाहरण में एक है Cat

मैं जो देख रहा हूं, वह कॉल छिपाना ओवरराइडिंग की तरह ही व्यवहार करता है, इसलिए वह अंतर क्यों करता है? यदि मैं उपरोक्त कक्षाओं का उपयोग करके यह कोड चलाता हूं:

Cat.testClassMethod();

मैं ले आता हूँ: बिल्ली में कक्षा विधि। लेकिन अगर मैं testClassMethod()कैट से हटाता हूं , तो मुझे मिलेगा: एनीमल में क्लास विधि।

जो मुझे दिखाता है कि एक स्थिर विधि लिखने के साथ, माता-पिता में एक ही हस्ताक्षर के साथ, एक उपवर्ग में बहुत अधिक ओवरराइड करता है।

उम्मीद है कि मैं स्पष्ट कर रहा हूं कि मैं कहां उलझन में हूं और कोई कुछ प्रकाश डाल सकता है। अग्रिम में ही बहुत शुक्रिया!


जवाबों:


103

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

छिपाना अन्य सभी सदस्यों (स्थैतिक विधियों, उदाहरण के सदस्यों, स्थिर सदस्यों) के लिए है। यह शुरुआती बंधन पर आधारित है। अधिक स्पष्ट रूप से, बुलाए जाने या उपयोग किए जाने की विधि या सदस्य का संकलन समय के दौरान तय किया जाता है।

आपके उदाहरण में, पहला कॉल, Animal.testClassMethod()एक staticविधि के लिए एक कॉल है , इसलिए यह बहुत निश्चित है कि किस विधि को कहा जाने वाला है।

दूसरी कॉल में myAnimal.testInstanceMethod(), आप एक गैर-स्थैतिक विधि कहते हैं। इसे आप रन-टाइम बहुरूपता कहते हैं। यह तय नहीं किया जाता है कि रन टाइम तक किस विधि को बुलाया जाए।

आगे स्पष्टीकरण के लिए, ओवरराइडिंग बनाम छुपाना पढ़ें ।


3
त्वरित उत्तर के लिए धन्यवाद, यह इसे स्पष्ट करता है! मैंने देखा कि JavaRanch उदाहरण में, उन्होंने चर का उपयोग कक्षा पद्धति को सीधे वर्ग का उपयोग करने के बजाय करने के लिए किया था जिससे समझने में आसानी होती है। मुझे लगता है कि जावा में ट्यूटोरियल वे कक्षा इस्तेमाल किया सीधे क्योंकि एक उदाहरण का उपयोग कर कॉल करने के लिए एक स्थिर विधि शायद अच्छा अभ्यास नहीं है, लेकिन वे का इस्तेमाल किया है चाहिए ) myAnimal.testClassMethod ( बजाय Animal.testClassMethod ()
लॉस्टलिंक

उदाहरण के बजाए इसे ठीक से शब्दों में रखने में सक्षम होने के लिए +1! :)
WhyNotHugo

@Kazekage Gaara क्या ओवरलोडिंग और छिपाने के बीच अंतर है?
gstackoverflow

1
मैं उत्तर के साथ पाठ्यक्रम से सहमत हूं, लेकिन कैसे private methods? वे नहीं हो सकते overriddenक्योंकि उपवर्ग उनके अस्तित्व के बारे में नहीं जानते हैं .. इसलिए वे hiddenइसके बजाय हो सकते हैं ।
पास्कलिस

बहुत बढ़िया जवाब! हालाँकि आप पूर्णता के लिए कोडरंच पर उदाहरण जोड़ सकते हैं :)
शुभम मित्तल

19

स्थैतिक विधियाँ छिपी हुई हैं, गैर-स्थैतिक विधियाँ ओवरराइड हैं। अंतर तब उल्लेखनीय है जब कॉल योग्य नहीं हैं "कुछ ()" बनाम "this.something ()"।

मैं वास्तव में इसे शब्दों पर नहीं डाल सकता, इसलिए यहाँ एक उदाहरण दिया गया है:

public class Animal {

    public static void something() {
        System.out.println("animal.something");
    }

    public void eat() {
        System.out.println("animal.eat");
    }

    public Animal() {
        // This will always call Animal.something(), since it can't be overriden, because it is static.
        something();
        // This will call the eat() defined in overriding classes.
        eat();
    }

}


public class Dog extends Animal {

    public static void something() {
        // This method merely hides Animal.something(), making it uncallable, but does not override it, or alter calls to it in any way.
        System.out.println("dog.something");
    }

    public void eat() {
        // This method overrides eat(), and will affect calls to eat()
        System.out.println("dog.eat");
    }

    public Dog() {
        super();
    }

    public static void main(String[] args) {
        new Dog();
    }

}

उत्पादन:

animal.something
dog.eat

1
ठीक है, अगर मैं `कुत्ते कर्कश = नया कुत्ता (); और कॉल husky.Animal();यह प्रिंट होगा animal.something या dog.something ? मुझे लगता है कि गलत कहने के लिए ** कि ** यह हमेशा Animal.something ()
अमरनाथ

@amarnathharish आप ऐसा नहीं कर सकते .Animal(), याद रखें Animal()कि एक निर्माता है।
Dude156

और किसी को भी आश्चर्यचकित करने के लिए और स्पष्टीकरण के रूप something()में, Animal() हमेशा कॉल के एनिमल्स में something()इसका कारण है क्योंकि एक स्थैतिक विधि के लिए कॉल को रन-टाइम के बजाय संकलन समय में हल किया जाता है। इसका अर्थ है कि स्थैतिक विधि कॉल Animal()हमेशा अंतर्निहित रूप से कॉलिंग है Animal.something()। यदि आप इसके बारे में सोचते हैं तो यह बहुत सहज है: className.staticMethodName()जब तक कॉल एक ही क्लास में न हो तब तक किसी स्थिर नाम से कॉल किया जाना चाहिए ।
Dude156

13

यह ओवरराइड और छिपाने के बीच का अंतर है,

  1. यदि पैरेंट क्लास और चाइल्ड क्लास दोनों पद्धति एक इंस्टेंस विधि है, तो इसे ओवरराइड कहा जाता है।
  2. यदि पैरेंट क्लास और चाइल्ड क्लास दोनों विधि स्टैटिक विधि है, तो इसे छुपाया जाता है।
  3. एक विधि कठपुतली में स्थिर और बच्चे में एक उदाहरण के रूप में स्थिर हो सकती है। और वीज़ा वर्सा।

यहाँ छवि विवरण दर्ज करें


3
आपने उस तालिका को सीधे उस ट्यूटोरियल से काटा और चिपकाया, जिसे ओपी ने कहा कि उसे समझने में मदद नहीं मिली।
वुल्फकैसल

तालिका इसे बहुत स्पष्ट करती है, उदाहरणों में सभी मामलों पर विचार नहीं किया गया था।
तूतक

3

यदि मैं आपके प्रश्न को ठीक से समझता हूं तो उत्तर है "आप पहले से ही ओवरराइड कर रहे हैं"।

"जो मुझे दिखाता है कि एक स्थिर विधि लिखना, माता-पिता के समान नाम के साथ, एक उपवर्ग में बहुत अधिक ओवरराइड करता है।"

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


1
यह उत्तर ओवरराइडिंग / छुपाने के संबंध में स्थिर बनाम विधियों के उदाहरण को संबोधित करने में विफल रहता है।
पॉल बेलोरा

3

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

public static void main(String[] args) {
    Animal acat = new Cat();
    acat.testInstanceMethod();
    acat.testClassMethod();

}

आउटपुट है:

The instance method in Cat.
Class method in Animal.

2
public class First {

    public void Overriding(int i) {  /* will be overridden in class Second */ }

    public static void Hiding(int i) {  /* will be hidden in class Second
                                           because it's static */ }
}


public class Second extends First {

    public void Overriding(int i) {  /* overridden here */  }

    public static void Hiding(int i) {  /* hides method in class First
                                           because it's static */ } 
}

याद रखने का नियम सरल है: एक विस्तारित वर्ग में एक विधि स्थैतिक को शून्य में नहीं बदल सकती है और शून्य को स्थैतिक में नहीं बदल सकती है। यह संकलन-त्रुटि का कारण होगा।

लेकिन अगर इसे ओवरराइडिंग में void Nameबदल दिया जाए void Name

और अगर static Nameइसे बदलकर static Nameछुपाया जाए। (दोनों उप-वर्ग की स्थिर विधि के साथ-साथ सुपरक्लास में से एक को बुलाया जा सकता है, जो विधि को कॉल करने के लिए उपयोग किए गए संदर्भ के प्रकार पर निर्भर करता है।)


1

इस कोड स्निपेट में मैं 'स्टेटिक' के बजाय 'प्राइवेट' एक्सेस मॉडिफायर का इस्तेमाल करता हूं ताकि आप छुपाने के तरीकों और ओवरराइडिंग के तरीकों में अंतर दिखा सकें।

class Animal {
// Use 'static' or 'private' access modifiers to see how method hiding work.
private void testInstancePrivateMethod(String source) {
    System.out.println("\tAnimal: instance Private method calling from "+source);
}
public void testInstanceMethodUsingPrivateMethodInside() {
    System.out.println("\tAnimal: instance Public method with using of Private method.");
    testInstancePrivateMethod( Animal.class.getSimpleName() );
}

// Use default, 'protected' or 'public' access modifiers to see  how method overriding work.
protected void testInstanceProtectedMethod(String source) {
    System.out.println("\tAnimal: instance Protected method calling from "+source);
}
public void testInstanceMethodUsingProtectedMethodInside() {
    System.out.println("\tAnimal: instance Public method with using of Protected method.");
    testInstanceProtectedMethod( Animal.class.getSimpleName() );
  } 
}  


public class Cat extends Animal {
private void testInstancePrivateMethod(String source) {
    System.out.println("Cat: instance Private method calling from " + source );
}
public void testInstanceMethodUsingPrivateMethodInside() {
    System.out.println("Cat: instance Public method with using of Private method.");
    testInstancePrivateMethod( Cat.class.getSimpleName());
    System.out.println("Cat: and calling parent after:");
    super.testInstanceMethodUsingPrivateMethodInside();
}

protected void testInstanceProtectedMethod(String source) {
    System.out.println("Cat: instance Protected method calling from "+ source );
}
public void testInstanceMethodUsingProtectedMethodInside() {
    System.out.println("Cat: instance Public method with using of Protected method.");
    testInstanceProtectedMethod(Cat.class.getSimpleName());
    System.out.println("Cat: and calling parent after:");
    super.testInstanceMethodUsingProtectedMethodInside();
}

public static void main(String[] args) {
    Cat myCat = new Cat();
    System.out.println("----- Method hiding -------");
    myCat.testInstanceMethodUsingPrivateMethodInside();
    System.out.println("\n----- Method overriding -------");
    myCat.testInstanceMethodUsingProtectedMethodInside();
}
}

आउटपुट:

----- Method hiding -------
Cat: instance Public method with using of Private method.
Cat: instance Private method calling from Cat
Cat: and calling parent after:
   Animal: instance Public method with using of Private method.
   Animal: instance Private method calling from Animal

----- Method overriding -------
Cat: instance Public method with using of Protected method.
Cat: instance Protected method calling from Cat
Cat: and calling parent after:
   Animal: instance Public method with using of Protected method.
Cat: instance Protected method calling from Animal

आश्चर्य है कि यह upvotes क्यों नहीं मिला..मुझे उत्तर की सराहना मिली।
अमरनाथ ath

0

मेरे हाल के जावा अध्ययनों के आधार पर

  • ओवरराइड करने की विधि , जब उपवर्ग में एक ही हस्ताक्षर के साथ एक ही विधि होती है।
  • विधि छिपाना , जब उपवर्ग में एक ही विधि का नाम है, लेकिन अलग-अलग पैरामीटर। इस मामले में, आप मूल पद्धति को ओवरराइड नहीं कर रहे हैं, बल्कि इसे छिपा रहे हैं।

उदाहरण के लिए OCP जावा 7 पुस्तक, पृष्ठ 70-71:

public class Point {
  private int xPos, yPos;
  public Point(int x, int y) {
        xPos = x;
        yPos = y;
  }

  public boolean equals(Point other){
  .... sexy code here ...... 
  }

  public static void main(String []args) {
   Point p1 = new Point(10, 20);
   Point p2 = new Point(50, 100);
   Point p3 = new Point(10, 20);
   System.out.println("p1 equals p2 is " + p1.equals(p2));
   System.out.println("p1 equals p3 is " + p1.equals(p3));
   //point's class equals method get invoked
  }
}

लेकिन अगर हम निम्नलिखित मुख्य लिखते हैं:

  public static void main(String []args) {
   Object p1 = new Point(10, 20);
   Object p2 = new Point(50, 100);
   Object p3 = new Point(10, 20);
   System.out.println("p1 equals p2 is " + p1.equals(p2));
   System.out.println("p1 equals p3 is " + p1.equals(p3));
   //Object's class equals method get invoked
  }

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


0
public class Parent {

  public static void show(){
    System.out.println("Parent");
  }
}

public class Child extends Parent{

  public static void show(){
    System.out.println("Child");
  }
}

public class Main {

public static void main(String[] args) {
    Parent parent=new Child();
    parent.show(); // it will call parent show method
  }
}

// We can call static method by reference ( as shown above) or by using class name (Parent.show())

0

लिंक किए गए जावा ट्यूटोरियल पेज ओवरराइडिंग और छिपने की अवधारणा को बताते हैं

एक ही हस्ताक्षर के साथ एक उपवर्ग में एक आवृत्ति विधि (नाम, प्लस संख्या और उसके मापदंडों का प्रकार) और सुपरक्लास में एक आवृत्ति विधि के रूप में वापसी प्रकार सुपरक्लास की विधि को ओवरराइड करता है।

यदि एक उप-वर्ग सुपरक्लास में एक स्थिर विधि के रूप में एक ही हस्ताक्षर के साथ एक स्थिर विधि को परिभाषित करता है, तो उप-वर्ग में विधि सुपरक्लास में एक को छुपाती है।

एक स्थैतिक विधि को छिपाने और एक आवृत्ति विधि को ओवरराइड करने के बीच अंतर के महत्वपूर्ण निहितार्थ हैं:

  1. ओवरराइड की गई आवृत्ति विधि का संस्करण जो उपविभाजित होता है, वह उपवर्ग में एक होता है।
  2. छिपी हुई स्थिर विधि का संस्करण जो कि आह्वान करता है, यह इस बात पर निर्भर करता है कि यह सुपरक्लास या उपवर्ग से लगाया गया है या नहीं।

अपने उदाहरण पर वापस आ रहे हैं:

Animal myAnimal = myCat;

 /* invokes static method on Animal, expected. */
 Animal.testClassMethod(); 

 /* invokes child class instance method (non-static - it's overriding) */
 myAnimal.testInstanceMethod();

उपरोक्त कथन अभी तक छिपता नहीं दिखा।

अब विभिन्न आउटपुट प्राप्त करने के लिए नीचे दिए गए कोड को बदलें:

  Animal myAnimal = myCat;
  
  /* Even though myAnimal is Cat, Animal class method is invoked instead of Cat method*/
  myAnimal.testClassMethod();
  
  /* invokes child class instance method (non-static - it's overriding) */
  myAnimal.testInstanceMethod();

मैं यह समझने की कोशिश कर रहा हूं कि शब्द को छिपाने का क्या मतलब है। क्या छुपा रहा है क्या? क्या मूल विधि में स्थिर विधि छिपी हुई है क्योंकि (कम से कम अपेक्षित) इसे लागू किया जाता है? या चाइल्ड क्लास में स्टैटिक मेथड छुपा हुआ है, क्योंकि यह इनवॉइस नहीं करता
बिच्छू

0

ऊपर सूचीबद्ध उदाहरणों के अलावा, यहाँ एक छोटा सा नमूना कोड छुपा और ओवरराइडिंग के बीच के अंतर को स्पष्ट करने के लिए है:

public class Parent {

    // to be hidden (static)
    public static String toBeHidden() {
        return "Parent";
    }

    // to be overridden (non-static)
    public String toBeOverridden() {
        return "Parent";
    }

    public void printParent() {
        System.out.println("to be hidden: " + toBeHidden());
        System.out.println("to be overridden: " + toBeOverridden());
    }
}

public class Child extends Parent {

    public static String toBeHidden() {
        return "Child";
    }

    public String toBeOverridden() {
        return "Child";
    }

    public void printChild() {
        System.out.println("to be hidden: " + toBeHidden());
        System.out.println("to be overridden: " + toBeOverridden());
    }
}

public class Main {

    public static void main(String[] args) {
        Child child = new Child();
        child.printParent();
        child.printChild();
    }
}

child.printParent()आउटपुट की कॉल :
छिपी होने के लिए: अभिभावक
को ओवरराइड किया जाना: बाल

child.printChild()आउटपुट की कॉल :
छिपी होने के लिए: बच्चे
को ओवरराइड करने के लिए: बाल

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

जावा केवल तरीकों के लिए छुपा और ओवरराइडिंग दोनों की अनुमति देता है। वही नियम चर पर लागू नहीं होता है। ओवरराइडिंग वैरिएबल की अनुमति नहीं है, इसलिए वैरिएबल को केवल छिपाया जा सकता है (स्थिर या गैर-स्थिर वैरिएबल के बीच कोई अंतर नहीं)। नीचे दिए गए उदाहरण से पता चलता है कि कैसे विधि getName()को ओवरराइड किया जाता है और चर nameको छिपाया जाता है:

public class Main {

    public static void main(String[] args) {
        Parent p = new Child();
        System.out.println(p.name); // prints Parent (since hiding)
        System.out.println(p.getName()); // prints Child (since overriding)
    }
}

class Parent {
    String name = "Parent";

    String getName() {
        return name;
    }
}

class Child extends Parent {
    String name = "Child";

    String getName() {
        return name;
    }
}

0

रनटाइम के दौरान ओवरराइड विधि के चाइल्ड वर्जन को हमेशा एक उदाहरण के लिए निष्पादित किया जाता है, भले ही वह विधि कॉल पैरेंट या चाइल्ड क्लास मेथड में डिफेड नेड हो। इस तरीके से, पेरेंट मेथड का उपयोग तब तक नहीं किया जाता है जब तक कि सिंटैक्स पेरेंटक्लासनामेथोड () का उपयोग करके पेरेंट मेथड को स्पष्ट कॉल न किया जाए। वैकल्पिक रूप से, रनटाइम के दौरान एक छिपी हुई विधि के मूल संस्करण को हमेशा निष्पादित किया जाता है यदि विधि के लिए कॉल पैरेंट क्लास में परिभाषित किया गया है।


0

विधि में अधिभावी , विधि संकल्प क्रम वस्तु के आधार पर JVM द्वारा किया जाता है। जबकि मेथड हिडेनिंग में, रेसोलुशन के आधार पर कंपाइलर द्वारा मेथड रेजोल्यूशन किया जाता है। इस प्रकार,

यदि कोड के रूप में लिखा गया होगा,

public static void main(String[] args) {
        Animal myCat = new Cat();        
        myCat.testClassMethod();        
    }

आउटपुट निम्नानुसार होगा:
पशु में कक्षा विधि।


0

इसे छिपाना कहा जाता है क्योंकि कंपाइलर सुपर क्लास विधि के कार्यान्वयन को छुपाता है, जब उपवर्ग में एक ही स्थिर विधि होती है।

कंपाइलर के पास ओवरराइड विधियों के लिए कोई दृश्यता सीमित नहीं है और यह केवल रनटाइम के दौरान तय किया जाता है कि कौन सा उपयोग किया जाता है।


0

यह ओवरराइड करने और छिपाने के बीच का अंतर है:

पशु a = नई बिल्ली ();

a.testClassMethod () मूल विधि में विधि को कॉल करेगा क्योंकि यह विधि छिपाने का एक उदाहरण है। कहा जाने वाला तरीका संदर्भ चर के प्रकार से निर्धारित होता है और संकलन समय पर तय किया जाता है।

a.testInstanceMethod () चाइल्ड क्लास में विधि को कॉल करेगा क्योंकि यह विधि ओवरराइडिंग का एक उदाहरण है। कहा जाने वाला तरीका उस ऑब्जेक्ट द्वारा निर्धारित किया जाता है जिसे रनटाइम पर विधि को कॉल करने के लिए उपयोग किया जाता है।


-1

जावा में स्थिर विधि कैसे छिपी होती है? बिल्ली वर्ग पशु वर्ग का विस्तार कर रहा है। तो कैट क्लास में दोनों स्टैटिक मेथड होंगे (मेरा मतलब चाइल्ड क्लास का स्टैटिक मेथड और पेरेंट क्लास का स्टैटिक मेथड) लेकिन जेवीएम पेरेंट स्टैटिक मेथड को कैसे छिपाता है? यह कैसे ढेर और ढेर में काम कर रहा है?


यह कोई उत्तर नहीं है। यह पूछे गए प्रश्न का विस्तार है। यह स्वयं एक अलग प्रश्न हो सकता है या प्रश्न पर टिप्पणियों का हिस्सा हो सकता है।
श्री9911
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.