2012-08-27 16 views
6

मैं एक वर्ग और एक उपवर्गभीतरी वर्ग का उपयोग, एक ही विधि का नाम

01 public class A{ 
02 void test(){}; 
03 public class B{ 
04  void test(){ 
05  test(); 
06  } 
07 } 
08 } 

ठीक है, कतार में 05 आईडी वर्ग ए की विधि परीक्षण एक्सेस करना चाहते मिल गया लेकिन मैं एक में जाने लूप क्योंकि मुझे नहीं पता कि कक्षा ए

किसी भी विचार का उपयोग करने के लिए निर्दिष्ट करने के लिए कैसे निर्दिष्ट किया जाए?

+2

यह उप वर्ग नहीं है। यदि आप वास्तव में यह संरचना चाहते हैं 'एथिस.test()' काम करेगा। – Thilo

+0

@ थिलो आप सही हैं, इसकी एक आंतरिक कक्षा है। क्षमा करें 4 कि –

उत्तर

13
01 public class A{ 
02 void test(){}; 
03 public class B{ 
04  void test(){ 
05  test(); // local B.test() method, so recursion, use A.this.test(); 
06  } 
07 } 
08 } 

संपादित करें जब तक फ्रीज होगा: मुझे @Thilo के रूप में ntioned: बाहरी वर्ग और आंतरिक वर्ग में समान विधि नामों का उपयोग करने से बचें, यह विवादों का नामकरण से बच जाएगा।

+3

+1। शायद एक बेहतर समाधान होगा कि विधि नामों को संघर्ष न करें। – Thilo

+0

सामान्य रूप से आप एक ही विधि नाम से बचने के लिए सही हैं, लेकिन मेरा मामला केवल मौजूदा उदाहरणों से जेनरेट प्रतिनिधिमंडल-वर्गों के लिए एक फ्रीमार्कर हाइबरनेट टेम्पलेट है। –

+0

मैंने इसे अपने कोड पर आजमाया है और मुझे 'स्थैतिक चर' मिलता है जिसे इसे स्थिर संदर्भ से संदर्भित नहीं किया जा सकता है। ' और जब मैं ए को छोड़ देता हूं तो यह सिर्फ यह बन जाता है।() (और मैं परीक्षण से कुछ) मुझे 'प्रतीक नहीं मिल रहा है'। ऐसा इसलिए है क्योंकि मेरे पास रिटर्न वैल्यू है जो त्रुटि का कारण बनता है और यदि ऐसा है तो मैं बाहरी फ़ंक्शन से किसी आंतरिक फ़ंक्शन में मान कैसे वापस कर सकता हूं – NSaid

0

कक्षा बी सिर्फ

public class B extends A { 
... 

} 

लिखने से आप की तरह

super.test() 

ए का परीक्षण() कॉल कर सकते हैं, तो आप कॉल एक तथाकथित एक नेस्टेड वर्ग कहा जाता क्लास ए विस्तार करने के लिए हो गया है नहीं है परीक्षण() की तरह आप इसे ऐसा कर क्या हम पुनरावर्ती कॉल और प्रलय का दिन

0

आप इसे स्थिर आप कॉल कर सकते हैं

A.test() 

वरना आप एक का एक उदाहरण की जरूरत बी में उपयोग करने के लिए

A a; 
a.test(); 
5

आप ऐसा कुछ कर सकते हैं करते हैं:

public class A{ 
    void test(){ 
     System.out.println("Test from A"); 
    }; 
    public class B{ 
     void test(){ 
      System.out.println("Test from B"); 
      A.this.test(); 
     } 
    } 

    public static void main(String[] args) { 
      A a = new A(); 
      B b = a.new B(); 
      b.test(); 
    } 
} 

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

Test from B 
Test from A 
संबंधित मुद्दे