2008-11-06 17 views
112

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

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

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

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

उत्तर

119

जो खोज आप खोज रहे हैं वह super है। उदाहरण के लिए, this guide देखें।

+3

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

111

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

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

super कीवर्ड का उपयोग करें।

14

super.MyMethod()class B के MyMethod() के अंदर बुलाया जाना चाहिए। तो यह रूप में साथ सुपर कीवर्ड आधार तरीके इस प्रकार

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

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

कॉल और संबंधित पैरामीटर पारित किया जाना चाहिए।

15

जवाब इस प्रकार है:

super.Mymethod(); 
super();    // calls base class Superclass constructor. 
super(parameter list);   // calls base class parameterized constructor. 
super.method();   // calls base class method. 
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); 
    } 
} 
2
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); 
    } 
} 
7

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

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

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

यह कोड में कोई जावा प्रतिबिंब नहीं दिखाता है और यह अन्य कोड के समान कोड है । क्या उत्तर के लिए और कुछ है? –

1

उर आरंभीकरण के लिए इन तरीकों तो वर्ग एक के निर्माताओं का उपयोग करें और वर्ग बी के निर्माता के अंदर सुपर कीवर्ड पारित का उपयोग कर

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

3

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

संबंधित मुद्दे