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


137

मेरे पास दो जावा कक्षाएं हैं: बी, जो एक अन्य वर्ग ए का विस्तार करता है, इस प्रकार है:

class A {
    public void myMethod() { /* ... */ }
}

class B extends A {
    public void myMethod() { /* Another code */ }
}

मैं कॉल करना चाहते हैं A.myMethod()से B.myMethod()। मैं सी ++ दुनिया से आ रहा हूं , और मुझे नहीं पता कि जावा में यह बुनियादी काम कैसे करना है।

जवाबों:


145

आप जिस कीवर्ड की तलाश कर रहे हैं super। उदाहरण के लिए इस गाइड को देखें ।


4
C ++ में ऐसा लगता है कि आप एक विशिष्ट पूर्वज विधि को कॉल कर सकते हैं, लेकिन जावा नहीं, आप बस इसे चेन को पास कर सकते हैं ...
rogerdpack

132

बस इसे सुपर का उपयोग करके कॉल करें।

public void myMethod()
{
    // B stuff
    super.myMethod();
    // B stuff
}

21

उत्तर इस प्रकार है:

super.Mymethod();
super();                // calls base class Superclass constructor.
super(parameter list);          // calls base class parameterized constructor.
super.method();         // calls base class method.

20

super.MyMethod()अंदर बुलाया जाना चाहिए MyMethod()की class B। तो यह इस प्रकार होना चाहिए

class A {
    public void myMethod() { /* ... */ }
}

class B extends A {
    public void myMethod() { 
        super.MyMethod();
        /* Another code */ 
    }
}


7

मुझे पूरा यकीन है कि आप इसे जावा परावर्तन तंत्र का उपयोग करके कर सकते हैं। यह सुपर का उपयोग करने जितना सीधा नहीं है लेकिन यह आपको अधिक शक्ति देता है।

class A
{
    public void myMethod()
    { /* ... */ }
}

class B extends A
{
    public void myMethod()
    {
        super.myMethod(); // calling parent method
    }
}

यह कोड में कोई जावा प्रतिबिंब नहीं दिखाता है और दूसरों के समान ही कोड है। क्या इसका जवाब कुछ और है?
Nelda.techspiress


3
super.baseMethod(params);

सुपर कीवर्ड के साथ आधार विधियों को कॉल करें और संबंधित पैरामेट्स को पास करें।


3
class test
{
    void message()
    {
        System.out.println("super class");
    }
}

class demo extends test
{
    int z;
    demo(int y)
    {
        super.message();
        z=y;
        System.out.println("re:"+z);
    }
}
class free{
    public static void main(String ar[]){
        demo d=new demo(6);
    }
}

3

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


1

यदि आरंभीकरण के लिए इन विधियों का उपयोग कर रहे हैं तो कक्षा A के कंस्ट्रक्टरों का उपयोग करें और क्लास B के कंस्ट्रक्टर के अंदर सुपर कीवर्ड पास करें।

या यदि आप उपवर्ग विधि से सुपर क्लास की विधि को कॉल करना चाहते हैं तो आपको उप-क्लास पद्धति के अंदर सुपर कीवर्ड का उपयोग करना होगा जैसे: super.myMethod ();


1
// Using super keyword access parent class variable
class test {
    int is,xs;

    test(int i,int x) {
        is=i;
        xs=x;
        System.out.println("super class:");
    }
}

class demo extends test {
    int z;

    demo(int i,int x,int y) {
        super(i,x);
        z=y;
        System.out.println("re:"+is);
        System.out.println("re:"+xs);
        System.out.println("re:"+z);
    }
}

class free{
    public static void main(String ar[]){
        demo d=new demo(4,5,6);
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.