2009-09-25 15 views
6

मान लीजिए मैं:जावा: बाहरी और भीतरी वर्ग तरीकों के बीच नाम अस्पष्टता

public class OuterClass() { 

    public class InnerClass { 
    public void someMethod(int x) { 
     someMethod(x); 
    } 
    } 

    public void someMethod(int x) { 
    System.out.println(x); 
    } 
} 

मैं बाहरी वर्ग के someMethod() और भीतरी वर्ग के someMethod() के बीच अस्पष्टता कैसे ठीक करूं?

उत्तर

13

आप OuterClass.this के साथ बाहरी को संदर्भित कर सकते हैं या OuterClass.this.method() के साथ विधि को कॉल कर सकते हैं।

हालांकि, डिजाइन की एक बिंदु के रूप में, नाम साझा करने भ्रामक कम से कम कहने के लिए है। यह उचित हो सकता है कि आंतरिक वर्ग एक विस्तार का प्रतिनिधित्व करता है या कहता है, एक अमूर्त विधि का एक ठोस कार्यान्वयन, लेकिन यह super.method को कॉल करके स्पष्ट होगा। एक सुपर विधि को सीधे कॉल करना, (जैसा कि ऐसा लगता है कि आप करना चाहते हैं?), भ्रमित है।

+0

+1 "आपको वास्तव में इसे इस तरह नाम देने की आवश्यकता नहीं है, क्या आप?" –

6

स्कोप यह बाहरी कक्षा में OuterClass.this.someMethod() साथ:

public class OuterClass { 

    public class InnerClass { 

    public void someMethod(int x) { 
     OuterClass.this.someMethod(x); 
    } 
    } 

    public void someMethod(int x) { 
    System.out.println(x); 
    } 
} 
+0

ओ ... स्टीव बी ने मेरे सामने एक ही जवाब पोस्ट किया। मैं यहां उदाहरण कोड के लिए अपना छोड़ दूंगा। – SingleShot

1

का नाम बदल रहा अस्पष्टता एक अच्छा अभ्यास है। विशेष रूप से यदि आप इसे ऊपर और पिछड़े वास्तुकला में लागू करते हैं।

+1

यह कक्षा काम नहीं करेगी यदि कक्षा इंटरफेस को कार्यान्वित कर रही है। –

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